pytest运行方式及前置后置封装详解

一、Pytest 优点认知

1.可以结合所有的自动化测试工具

2.跳过失败用例以及失败重跑

3.结合allure生产美观报告

4.和Jenkins持续集成

5.很多强大的插件

  1. pytest-html:生产html测试报告

  2. pytest-xdist:多线程运行

  3. pytest-ordering:改变用例执行顺序

  4. pytest-rerunfailures:失败用例重爬

  5. allure-pytest:美观测试报告

一般项目中,会使用requerments.text文档保存插件名称,进行批量一次性安装

复制代码
pip install -r requerments.txt
二、运行方式

1.主函数运行方式:main方法运行

2.命令运行方式
pytest -vs

-v:更加详细信息

-s:调试信息

-n=处理:多线程运行

--reruns=数字:失败用例重跑

--reruns=数字:失败用例重跑

--html=./report.html:生成html报告

用例分组运行

1.进行用例分组:

2.用例进行注解:

复制代码
#@pytest.mark.分组名称  如下:

@pytest.mark.smoke
  1. [pytest]

  2. ##运行命令,例如: -vs -m "smoke"分组执行名称都是固定的

  3. addopts = -vs

  4. #测试用例文件目录

  5. testpaths = ./testcases

  6. python_files = test_*.py

  7. python_classes = Test*

  8. python_functions = test_*

  9. ##分组

  10. markers =

  11. smoke:maoyan

  12. case:gongneng

三、前置后置,夹具
1.简单区分:直接调用方法,但是接口过多时,比较麻烦
  1. def setup(self):

  2. print("每个用例执行之前,都执行一遍")

  3. def teardown(self):

  4. print("每个用例执行之后,都执行一遍")

2.实现部分前置:如只想之一个用例进行前置,如登录时需要连接数据库。

需要使用装置器:

参数介绍:

@pytest.fixture(scope="作用域",params="数据驱动",autouse="是否自动执行",ids="自定义参数",name="重命名")

作用域:可以函数、类、模块、包、session

使用方法:

1.需要前置的功能函数上进行标注装置器

2.别的方法函数之间调用装置器

如下:一个文件里面进行部分前置唤醒

  1. import time

  2. import pytest

  3. import requests

  4. #实现装置器标注前置,进行标注,yieid进行唤醒返回

  5. @pytest.fixture(scope="function")

  6. def conn_getbase():

  7. print("连接数据库成功")

  8. yield

  9. print("关闭数据库成功")

  10. class TestSendRequsets:

  11. #过多接口时,比较麻烦冗余

  12. # def setup(self):

  13. # print("每个用例执行之前")

  14. #

  15. # def teardown(self):

  16. # print("每个用例执行之后")

  17. def test_getImgCode(self):

  18. # 接口url

  19. t = time.time()

  20. timess = str(int(round(t * 1000)))

  21. times = str(int(t))

  22. url = "http://124.71.230.185:9002/jeecg-boot/sys/randomImage/" + "" + timess

  23. # 参数

  24. data = {

  25. "_t": times,

  26. }

  27. # # get请求

  28. rep = requests.request('get', url, params=data)

  29. print(rep.text)

  30. # 标注为smoke分组用例

  31. @pytest.mark.smoke

  32. def test_Login(self,conn_getbase):

  33. # post请求

  34. url = "http://124.71.230.185:9002/jeecg-boot/sys/login"

  35. # 参数

  36. data = {

  37. "captcha": "Gkak!@#2021",

  38. "checkKey": 1637811815838,

  39. "password": "123456",

  40. "remember_me": 1,

  41. "username": "admin"

  42. }

  43. rep = requests.request('post', url, json=data)

  44. statues = rep.json()["success"]

  45. message = rep.json()["message"]

  46. if statues:

  47. print("")

  48. else:

  49. # raise Exception(message)

  50. print(message)

  51. if __name__ == '__main__':

  52. pytest.main();

3.封装灵活调用

一般情况下:@pytest.fixture()会和conftest.py文件一块使用

conftest.py名称是固定的,功能如下:

1.用处是多个py文件之间共享前置配置。

2.里面的方法在调用时,不需要导入,可以之间调用

3.可以都多个conftest.py文件,也可以有不同的层级

conftest.py文件详情请看下一章

实现:

1.目录下之间创建conftest.py文件

2.把上面的这段代码之间粘贴到conftest.py文件中

  1. # 前置函数

  2. import pytest

  3. @pytest.fixture(scope="function")

  4. def conn_getbase():

  5. print("连接数据库成功")

  6. yield

  7. print("关闭数据库成功")

相关推荐
isyangli_blog8 小时前
OpenDayLight (Carbon 版本) 启动与组件安装
开发语言·php
vb2008118 小时前
FastAPI APIRouter
开发语言·python
Benszen8 小时前
KVM虚拟化解决方案
开发语言·perl
会编程的土豆9 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
東雪木9 小时前
多线程与并发编程 专属复习笔记
java·开发语言·笔记·java面试
杨充9 小时前
1.3 浮点型数据设计灵魂
开发语言·python·算法
噜噜噜阿鲁~9 小时前
python学习笔记 | 11.3、面向对象高级编程-多重继承
java·开发语言
basketball6169 小时前
Go 语言从入门到进阶:4. 数组和MAP使用方法总结
开发语言·后端·golang
春生野草10 小时前
反射、Tomcat执行
java·开发语言
雪的季节11 小时前
企业级 Qt 全功能项目
开发语言·数据库·qt