pytest是python的测试框架,它提供了许多功能,
测试运行
组织pytest的测试用例代码
:模块名称以test_开头,类名以Test开头,函数名以test_开头, 然后用pytest命令
即可运行测试用例。
- 可以在命令行中,用pytest命令运行
- 也可以在代码中,用pytest.main()运行
api自动化测试实现
- 第一步:通过
代码编写
,最终需要在测试用例,test_开头的函数中,对接口进行请求,然后断言。 - 第二步:pytest运行时,就可以批量调接口api, 使用**–aluredir**参数,可以
生成allure的测试报告
。 - 第三步:代码
集成到git和jenkins
中,代码最后在jenkins里面,运行pytest命令,allure的测试报告存在Jenkins的workspace中。
再结合Jenkins的allure插件
可以在Jenkins中,查看历史测试报告
。 最后可以设置Jenkins的邮件(钉钉)通知
,发送报告。
具体代码实现
- 代码目录下有一个libs 目录(业务层), 一个功能模块写成一个py文件。 然后去封装接口,pytest测试用例方法,再调用libs层封装方法。
a【各个模块的请求方法、url 集中存在一个yaml文件中】 b【请求参数,预期值,是放到excel中的】
- 业务层的业务类继承了BaseApi基类,也是自己封装的,提供了请求方法--------它可以获取到对应模块的接口的 method 和 URL
- 在测试用例的类中,每个测试方法那里,首先使用xrld获取到excel文件中对应接口的请求参数。使用 @pytest.mark.parametrize把数据传给测试用例,进行数据驱动。
- 初始化和身份校验
- pytest它支持写初始化和清除的代码,使用@pytest.fixture()装饰器。参数:scope,参数3:autouse
- 用例testcase目录,添加conftest.py, 里面写了整个项目运行前的初始化,进行登录。并且返回了token。 页面类进行实例化时,会传传入token,页面类请求接口时,会自动带上token。
- 我在之前公司的实际项目中,也是初始化进行了登录,然后把token保存到配置中-----方式有所不同。
以上pyest部分未提到的一些用法
- 测试用例调用初始化方法:
- @pytest.fixture(autouse=True) 、
- @pytest.mark.usefixtures(“方法名”) 、
- 或直接在test_开头的函数中,直接把
fixture定义的方法名
当成参数传入。
- 装饰器 @pytest.mark.repeat(2) 可以重复运行测试用例。
- pytest-assume库提供的,pytest.assume() 断言,如果断言失败,会继续执行,直到全部执行完。
- 测试用例方法上,添加@pytest.mark.skipif(True, reason=“跳过原因”),可以跳过用例。 (或 @pytest.mark.skip)
- pytest命令运行时,可以添加 -k 参数,指定某个测试用例py模块,或者测试用例类,或者某个测试用例方法。
allure测试报告
安装allure-pytest
- allure.attach() 可以添加更多的日志、截图等。
- @allure.epic、@allure.feature、@allure.story、@allure.title, 让用例分层。
- 使用with allure.step(),可以添加步骤。 若调用外部方法,也可以使用装饰器@allure.step(),装饰在外部方法上