【金秋打卡】第13天+PyTest框架学习
2022/11/8 3:23:59
本文主要是介绍【金秋打卡】第13天+PyTest框架学习,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
课程名称
全能软件测试工程师
课程章节
PyTest测试框架
课程讲师
大周
课程内容
PyTest断言
assert ...
PyTest参数化
import pytest def add(a, b): return a + b # 第一种实现参数化的写法 @pytest.mark.parametrize(['x','y'],[(1,2),(0,3),(1,4)]) def test_add1(x, y): ... # 第二种参数化的写法 xy = [(-1,3),(-1,4),(1,-4)] @pytest.mark.parametrize(['x','y'],xy) def test_add2(x,y): ...
PyTest测试用例组织
pytest用例默认执行顺序是从上到下
执行顺序通过装饰器设置:
@pytest.mark.run(order=1) @pytest.mark.first # 优先级最高,但不推荐同时使用,容易产生冲突
在优先级方面
- 正数 :pytest.mark.first是最高优先级
- 倒数: pytest.mark.last优先级要低于order=-1
如果我们在进行标记顺序时,假设我们采用了数字的形式,那么就都用数字
PyTest指定运行测试用例
if __name__ == "__main__": #根据路径指定运行模块或文件夹 # pytest.main(['test_pytest1.py']) # pytest.main(['test_my_case/test_pytest1.py']) # pytest.main(['test_my_case']) #指定运行模块下的测试函数或者测试类 # pytest.main(['test_pytest4.py::test_01']) # pytest.main(['test_pytest4.py::TestLogin::test_05']) #指定多个测试模块运行 # pytest.main(['test_pytest4.py::TestLogin::test_05', # 'test_pytest4.py::test_01'])
PyTest前置和后置操作
setup_class和teardown_class 该方法表示在类中执行测试用例前,只执行1次测试前置和测试后置 setup_method和teardown_method 该方法表示在类中每次执行测试用例前,测试前置和测试后置都会执行一次 setup_module和teardown_module 该方法表示只能类外面执行用例过程中,只执行1次。 setup_function和teardown_function 该方法表示在类外面执行用例过程中,每次都会执行前置和后置
1、setup_class和setup_module执行用例时,只执行一次前置和后置
2、setup_class、setup_method、setup是在类中执行的
3、setup_module、setup_function、setup是在类外执行的
4、其中setup类中、类外都可以执行
Fixture
fixture是pytest特有的功能,它用pytest.fixture标识,定义在函数前面。在你编写测试函数的时候,你可以将此函数名称做为传入参数,pytest将会以依赖注入方式,将该函数的返回值作为测试函数的传入参数。
fixture主要的目的是为了提供一种可靠和可重复性的手段去运行那些最基本的测试内容。比如在测试网站的功能时,每个测试用例都要登录和退出,利用fixture就可以只做一次,否则每个测试用例都要做这两步也是冗余。
Fixture多应用
- 同一个fixture返回多个值:可以使用元组解包
@pytest.fixture def first_fixture(): return 1,2,3 def test_case1(first_fixture): a,b,c = first_fixture print(a,b,c)
- 一个函数传入多个fixture
@pytest.fixture def second_fixture(): print("这是第二个fixture") def test_case2(first_fixture,second_fixture): print(first_fixture) print(second_fixture)
Fixture作用域与自动化
- fixture里面有个scope参数可以控制fixture的作用范围:
session > module > class > function
- 当我们使用fixture时,把scope的值设置成class时,每一个测试类之前都会被运行,pytest在每个测试函数的外层会自动的把函数包装成一个测试类
- 在使用fixture时,
scope=function
时,无论时在函数中,还是在方法中,都是作用域为funtion在生效 - 在我们使用的最新的Python版本中,去掉了scope=method这个作用域
Fixture实现参数化
import pytest # fixture实现参数化 test_case = [ { 'username':'admin', 'password':'12345678', 'case_desperation':'正确登录' }, { 'username': 'imooc', 'password': '12345678', 'case_desperation': '错误的登录' }, ] @pytest.fixture(params=test_case) def param_data(request): # request是pytest内置的fixture,必须这样写才能传进来 # 它的作用主要就是用来帮助我们传递参数 return request.param def test_param(param_data): usernmae = param_data.get('username') password = param_data.get('password') case_desperation = param_data.get('case_desperation') print("username:"+usernmae+", password:"+password+", case_desperation:"+case_desperation)
Fixture实现测试控制
- 无理由跳过
@pytest.mark.skip def function(): ...
- 有理由跳过
@pytest.mark.skipif(...) def function(): ...
Fixture集成Allure
# 生成测试数据 if __name__ == "__main__": pytest.main([ 'test_pytest13.py', '--alluredir', './result' ]) # 生成allure报告 os.system("allure generate ./result -o ./report_allure --clean") # 直接在默认浏览器中打开测试报告 allure open ./report
课程收获
学习了PyTest测试框架。
这篇关于【金秋打卡】第13天+PyTest框架学习的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南