一、pytest单元测试框架
概念:单元测试是指在软件开发中,针对软件的最小单位(函数、方法等)进行正确性的检查测试
         单元测试框架是自动化测试框架中的组成部分之一
         pom设计模式是自动化测试框架中的组成部分之一
用途:
  • 测试发现:从多个文件里面去找到我们的测试用例
  • 测试执行:按照一定的顺序和规则去执行,生成结果
  • 测试判断:通过断言判断逾期结果和实际结果的差异
  • 测试报告:统计测试进度,耗时,通过率,生成测试报告
 
 
二、pytest简介
  • pytest是一个非常成熟的单元框架,比unittest更灵活,容易上手
  • pytest可以和selenium、request、appium结合实现web自动化、接口自动化、app自动化
  • pytest可以实现测试用例的跳过以及reruns失败用例充实
  • pytest可以和allure生成非常美观的测试报告
  • pytest可以和jenkins持续继承
  • pytest有很多非常强大的插件,并且这些插件能够实现很多的实用操作
例如
  • pyest-html 生成html格式的测试报告
  • pytest-xdist 测试用例分布式执行,多CPU分发
  • pytest-ordering 改变测试用例的执行顺序
  • pytest-rerunfailures 用例失败后重跑
  • allure-pytest 生成美观的测试报告
  • ......
  • 安装方式:pip3 install xxx
三、pytest默认的测试用例规则及基础应用
  • 模块名必须以test_开通或者_test结尾,必须有_
  • 测试类必须以Test开头,并且不能有init初始化方法
  • 测试方法必须以test开头,_可有可无
四、pytest测试用例的运行方法
1.主函数模式
# -*- coding: utf-8 -*-
# @Time: 2022/5/3 16:37
# @Author: LiQi
# @Describe: import pytest """
main函数建议在项目主目录创建一个py文件,统一管理case执行情况
"""
if __name__ == '__main__':
#1.全部模块运行
pytest.main()
#2.指定模块运行,比如我们有多个py文件,我们只执行指定模块,main方法传参必须是list,里面可以有多个参数
pytest.main(['test_login.py']) #模块名.py #3.指定目录运行,比如我们有多个文件夹测试用例集合,我们指定某一个文件夹全部指向,而不是里面的某一个模块
pytest.main(['文件夹名'])
#4.通过nodeid指定用例运行,nodeid由模块名,分隔符,类名,方法名,函数名组成,分隔符是::
pytest.main(['文件夹名/模块名.py::类名::函数名']) #类里面包含的函数
pytest.main(['文件夹名/模块名.py::函数名']) #没有写类,单独的函数

2.命令行模式

# 命令行直接输入pytest全部执行
~/Desktop/py_scripy/pytest_x ❯ pytest
# 命令行指定模块执行
~/Desktop/py_scripy/pytest_x ❯ pytest 模块名.py
# 命令行指定目录执行
~/Desktop/py_scripy/pytest_x ❯ pytest 文件夹名
# 命令行指定函数
~/Desktop/py_scripy/pytest_x ❯ pytest 文件夹名/模块名.py::函数名
~/Desktop/py_scripy/pytest_x ❯ pytest 文件夹名/模块名.py::类名::函数名
3.通过读取pytest.ini配置文件运行
  • pytest.ini是pytest单元测试框架的核心配置文件
  • 位置:一般放在项目的根目录下
  • 名字:必须是pytest.ini ,不可以自定义
  • 编码:必须是ANSI编码格式
  • 作用:改变pytest的默认行为
  • 运行的规则:不管主函数模式还是命令行运行,都会去读取这个文件,按里面的规则执行
下面是一些常用配置:
#固定格式
[pytest] # 执行时添加的运行参数
addopts = -vs -s
#测试用例执行的文件夹
testpaths = testcase #配置测试搜索的模块文件名称
python_files = test*.py
# 配置测试搜索的测试类名
python_classes = Test*
#配置测试搜索的测试函数名
python_functions = test
4.运行参数详解
-s:输出用例里面的调试信息,包括print打印信息
#main函数
if __name__ == '__main__':
#全部模块
pytest.main(['-s'])
# 指定模块调试,其余组合场景与主函数运行一致
pytest.main(['-s','模块名.py']) #命令行
pyest -s
pytest -s 模块名.py
-v:输出用例的详细信息,包含执行路径等
#main函数
if __name__ == '__main__':
# main方法传参必须是list,里面可以有多个参数
pytest.main(['-v']) #命令行
pytest -v
-vs:-v和-vs两个参数组合使用,输出详细的信息
#main函数
if __name__ == '__main__':
pytest.main(['-vs']) #命令行
pytest -vs
-n:分布式或者多线程执行
#main函数
if __name__ == '__main__':
pytest.main(['-vs','-n=2'])# 2指的是线程数,自定义 #命令行
pytest -vs -n 2

--reruns:失败用例重跑

#main函数
if __name__ == '__main__':
pytest.main(['-vs','-n=2','--reruns=3'])# 3指的是用例执行失败重跑的次数,自定义 #命令行
pytest -vs -n 2 --reruns 3
-x:只要有一个用例报错,那么测试停止不再执行
#main函数
if __name__ == '__main__':
pytest.main(['-vs','-n=2','-x']) #命令行
pytest -vs -n 2 -x
--maxfail:最大用例失败数
#main函数
if __name__ == '__main__':
pytest.main(['-vs','-n=2','--maxfail=3'])# 3指的是用例执行最大失败数,达到次数则停止 #命令行
pytest -vs -n 2 --maxfail 3
--html:输出测试报告

安装:pip3 install pytest-html
#main函数
if __name__ == '__main__':
pytest.main(['-vs','--html="xxx/xxx.html"'])#指定在哪里路径生成 #命令行
pytest --html xxx/xxx.html
-k:根据测试用例部分字符串指定测试用例
#main函数
if __name__ == '__main__':
pytest.main(['-vs','-k=str'])# str指的是包含的字符串,包含该字符串的所有case会执行 #命令行
pytest -k 字符串

五、pytest执行顺序

  • unittest执行顺序是按ASSIC码大小顺序执行
  • pytest执行测试顺序是从上向下执行
  • 我们可以通过装饰器指定执行顺序
安装:pip3 install pytest-ordering

使用:@pytest.mark.run(order=number)
参数: order:int类型,指定case第几个执行
执行的时候,pytest会按顺序优先执行有该标记的用例,之后继续按顺序执行没有标记的用例
#示例
import pytest class TestRegister:
#指定该用例第二个执行
@pytest.mark.run(order=2)
def test_login(self):
print('测试登录')
#指定该用例第一关执行
@pytest.mark.run(order=1)
def test_register(self):
print('测试注册')
六、分组执行
我们的项目有多种类型的用例,比如冒烟、模块、接口等,我们要分组执行,使用装饰器
#pytest.ini配置
#用例分组执行 ,格式:标签名:描述
markers =
smokey:冒烟用例
api:模块用例
#用例py文件
@pytest.mark.smoke
def test_register(self):
print('测试注册') @pytest.mark.api
def test_login(self):
print('测试登录')

执行

#指定一个组执行
pytest -vs -m "分组标签名"
#指定多个组执行 使用or
pytest -vs -m "分组标签名 or 分组标签名"
七、pytest跳过测试用例
无条件跳过:
@pytest.mark.skip(reason='原因描述')
#使用skip装饰器跳过,reason可添加跳过的原因
有条件跳过
@pytest.mark.skipif(i=1,reason='描述')
#使用skipif装饰器跳过,reason可添加跳过的原因,格式:判断表达式,原因

1.pytest入门的更多相关文章

  1. pytest 入门及运行

    关于pytest的入门教程,官网及网上已经很多了,那再多一点也无所谓吧!OK,进入正题~ 下面是一个测试用例,test_one.py def test_passing():    assert (1, ...

  2. pytest入门学习(2)

    pytest的hello world pyt1.py def func(x): print (x+1); return x+1; def test_answer(): assert func(3) = ...

  3. pytest入门学习(1)

    系统ubuntu 12.04 , 可上网 一.安装: 1.安装 setuptools 下载页面:https://bitbucket.org/pypa/setuptools/get/default.ta ...

  4. Python测试框架pytest入门基础

    Pytest简介 Pytest is a mature full-featured Python testing tool that helps you write better programs.T ...

  5. 【PYTEST】第一章常用命令

    pytest入门 安装pytest 运行pytest pytest常用命令 1. 安装pytest pip install pytest 2. 运行pytest 2.1 pytest默认搜索当前目录下 ...

  6. pytest学习--快速入门

    一.pytest简介 Pytest是python的一种单元测试框架. pytest的特点: 入门简单,文档丰富 支持单元测试,功能测试 支持参数化,重复执行,部分执行,测试跳过 兼容其他测试框架(no ...

  7. pytest文档1-环境准备与入门

    前言 首先说下为什么要学pytest,在此之前相信大家已经掌握了python里面的unittest单元测试框架,那再学一个框架肯定是需要学习时间成本的. 刚开始我的内心是拒绝的,我想我用unittes ...

  8. pytest 学习笔记一 入门篇

    前言 之前做自动化测试的时候,用的测试框架为Python自带的unittest框架,随着工作的深入,发现了另外一个框架就是pytest (官方地址文档http://www.pytest.org/en/ ...

  9. Pytest权威教程01-安装及入门

    目录 安装及入门 安装 Pytest 创建你的第一个测试用例 执行多条测试用例 断言抛出了指定异常 使用类组织多条测试用例 函数测试中请求使用独立的临时目录 进一步阅读 返回: Pytest权威教程 ...

随机推荐

  1. UI自动化框架搭建之Python3

    UI自动化框架搭建--unittest 使用的代码是Python3版本,与时俱进哈哈 解释一下我的框架目录接口(每个人框架的目录接口不一样,根据实际要求) common目录:公共模块,这个地方可以存放 ...

  2. Python 工匠:一个关于模块的小故事

    前言 模块(Module)是我们用来组织 Python 代码的基本单位.很多功能强大的复杂站点,都由成百上千个独立模块共同组成. 虽然模块有着不可替代的用处,但它有时也会给我们带来麻烦.比如,当你接手 ...

  3. 从零开始实现一个MyBatis加解密插件

    作者:vivo 互联网服务器团队- Li Gang 本篇文章介绍使用MyBatis插件来实现数据库字段加解密的过程. 一.需求背景 公司出于安全合规的考虑,需要对明文存储在数据库中的部分字段进行加密, ...

  4. HTTPS 一定是安全的吗?

    大家好,我是小林. 上周有位读者在面字节时被问道这么一个问题:HTTPS 一定安全可靠吗? 这个问题的场景是这样的:客户端通过浏览器向服务端发起 HTTPS 请求时,被「假基站」转发到了一个「中间人服 ...

  5. 一次客户需求引发的K8S网络探究

    前言 在本次案例中,我们的中台技术工程师遇到了来自客户提出的打破k8s产品功能限制的特殊需求,面对这个极具挑战的任务,攻城狮最终是否克服了重重困难,帮助客户完美实现了需求?且看本期K8S技术案例分享! ...

  6. 如何在 HTML 中调整图像大小?

    了解在 HTML 中调整图像大小的不同技术.何时应避免在浏览器端调整大小,以及在 Web 上操作和提供图像的正确方法. 如果您的图像不适合布局,您可以在 HTML 中调整其大小.在 HTML 中调整图 ...

  7. ARC120F Wine Thief (组合数学)

    题面 有一个长为 N N N 的序列,相邻的两个数中只能选一个,总共选 k k k 个数,一种方案的价值为选的 k k k 个数的和,问所有合法方案的价值总和,答案对 998244353 取模. 1 ...

  8. DataGridVIew控件绑定数据之后的,增、插、删操作

    最开始没有绑定数据,很快就实现了增.插.删操作,可是绑定数据之后,进行这些操作就会报错. 网上对这方面的资料比较少,自己摸索着找到了解决方法,也就是直接对绑定的数据进行操作,这里以DataTable为 ...

  9. Linux虚拟机破解密码步骤

    Linux破解密码 重启系统 到达logo界面快速 按 e 编辑当前条目 将光标移至以 linux 开头的行,此为内核命令行 在UTF-8(RHEL7):ro(RHEL8)后添加 rd.break ( ...

  10. SpringBoot多重属性文件配置方案笔记

    SpringBoot多重属性文件配置方案笔记 需要重写PropertyPlaceholderConfigurer 同时要忽略DataSourceAutoConfiguration @SpringBoo ...