找回密码
 立即注册
首页 群组 IT互联网 网站 程序园子 pytest框架

pytest框架

卢铃语 2025-7-28 15:06:21
 
pytest 是 python 的第三方单元测试框架,比自带unittest 更简洁和高效,支持315种以上的插件,同时兼容 unittest 框架。这就使得我们在 unittest 框架迁移到pytest 框架的时候不需要重写代码。接下来我们在文中来对分析下 pytest 有哪些简洁、高效的用法: 环境搭建
  1. #首先使用 pip 安装 pytest<br>pip install pytest
  2. pip install pytest-html    #原生态报告模板<br>pip show pytest         #查看 pytest 是否安装成功
复制代码
 使用 pytest 执行测试需要遵行的规则:

  • 必须以test_开头,或,test结尾
  • 测试类必须以Test开头,,并且类中不能有_init_方法
  • 测试方法必须以test开头
  • 断言必须使用assert
 在pytest中有四种setup和teardown:

  • setup_module 和 teardown_module 在整个测试用例所在的文件中所有的方法运行前和运行后运行,只会运行一次;
  • setup_class 和 teardown_class 则在整个文件中的一个class中所有用例的前后运行,
  • setup_method 和 teardown_method 在class内的每个方法运行前后运行,
  • setup_function、teardown_function 则是在非class下属的每个测试方法的前后运行;
  数据驱动:举例:
  1. @pytest.mark.parametrize( "x,y,z", [(1,2,3),(2,3,4)] )  #列表套列表/列表套元组均可
  2.   def test1(x,y,z):
  3.     assert x+y == z
复制代码
 
 
fixture源码详解fixture(scope='function',params=None,autouse=False,ids=None,name=None):

  • scope:有四个级别参数"function"(默认),"class","module","session"
  • params:一个可选的参数列表,它将导致多个参数调用fixture功能和所有测试使用它。
  • autouse:如果True,则为所有测试激活fixture func可以看到它。如果为False则显示需要参考来激活fixture
  • ids:每个字符串id的列表,每个字符串对应于params这样他们就是测试ID的一部分。如果没有提供ID它们将从params自动生成
  • name:fixture的名称。这默认为装饰函数的名称。
fixture的作用范围  fixture里面有个scope参数可以控制fixture的作用范围:  session>module>class>function

  • -function:每一个函数或方法都会调用
  • -class:每一个类调用一次,一个类中可以有多个方法
  • -module:每一个.py文件调用一次,该文件内又有多个function和class
  • -session:是多个文件调用一次,可以跨.py文件调用,每个.py文件就是module
 usefixtures与传fixture区别:

  • 如果fixture有返回值,那么usefixture就无法获取到返回值,这个是装饰器usefixture与用例直接传fixture参数的区别。
  • 当fixture需要用到return出来的参数时,只能讲参数名称直接当参数传入,不需要用到return出来的参数时,两种方式都可以。
fixture自动使用autouse=True  当用例很多的时候,每次都传这个参数,会很麻烦。  fixture里面有个参数autouse,默认是False没开启的,可以设置为True开启自动使用fixture功能,这样用例就不用每次都去传参了  autouse设置为True,自动调用fixture功能调用fixture的三种方法
  1. 1   #1、函数或类里面方法直接传fixture的函数参数名称
  2. 2    @pytest.fixture()
  3. 3    def test1():
  4. 4     print('\n开始执行function')
  5. 5   
  6. 6    def test_a(test1):
  7. 7      print('---用例a执行---')
  8. 8   
  9. 9  #2、使用装饰器@pytest.mark.usefixtures()修饰需要运行的用例
  10. 10  @pytest.fixture()
  11. 11  def test1():
  12. 12      print('\n开始执行function')
  13. 13  @pytest.mark.usefixtures('test1')
  14. 14  def test_a():
  15. 15      print('---用例a执行---')
  16. 16  
  17. 17  #3、叠加usefixtures
  18. 18  #如果一个方法或者一个class用例想要同时调用多个fixture,可以使用@pytest.mark.usefixture()进行叠加。注意叠加顺序,先执行的放底层,后执行的放上层。
  19. 19  import pytest
  20. 20
  21. 21  @pytest.fixture()
  22. 22  def test1():
  23. 23      print('\n开始执行function')
  24. 24
  25. 25  @pytest.mark.usefixtures('test1')
  26. 26  def test_a():
  27. 27      print('---用例a执行---')
  28. 28  
  29. 29  @pytest.fixture()
  30. 30  def test1():
  31. 31      print('\n开始执行function1')
  32. 32
  33. 33  @pytest.fixture()
  34. 34  def test2():
  35. 35      print('\n开始执行function2')
  36. 36
  37. 37  @pytest.mark.usefixtures('test1')
  38. 38  @pytest.mark.usefixtures('test2')
  39. 39  def test_a():
  40. 40      print('---用例a执行---')
复制代码
 
#pytest.main()
启动Pytest测试运行器,main() 函数如果不带任何参数,会自动查找和执行当前路径及其子目录中所有符合Pytest命名规范的所有测试文件(通常是文件名以 test_ 开头)。
  #常用参数:
  1. #示例<br>
复制代码
test_1.py文件test_2.py文件 
  1. Login类:<br>  登录方法 login<br>Shop类: <br>  列出方法 shop_list<br>   更新方法 shop_update
复制代码

  • -m   -m :运行指定标记的用例(需配合@pytest.mark使用)。支持逻辑表达式(如and/or)组合多个标记
        如:pytest.main(['-m', 'smoke']) # 执行标记为smoke的用例

  • --k :按名称匹配用例(支持逻辑运算符)  
        如:pytest.main( ['-k', 'test_login or test_logout'] )   # 执行名称包含login 或 logout的用例

  • -s      #输出到控制台。
  • -v     #以详细模式运行测试,显示更多的信息,如每个测试用例的名称、结果和错误信息。
  • --collect-only   #只收集测试用例但不执行它们,可以用于查看测试集中的所有可用测试。
  • -ignore     #忽略某个测试模块
  • -q     #简化打印信息
  • -x     #出现一条测试用例失败就退出测试。在调试阶段非常有用,当测试用例失败时,应该先调试通过,而不是继续执行测试用例。
跳过/条件跳过  skip   跳过--相当于注释的效果  skipif  有条件的跳过-- 
Allure报告优化
使用方法参数值参数说明
@allure.epic()epic描述敏捷里面的概念,定义史诗,往下是feature
@allure.feature()模块名称功能点的描述,往下是story
@allure.story()用户故事用户故事,往下是title
@allure.title(用例的标题)用例的标题重命名html报告名称
@allure.testcase()测试用例的链接地址对应功能测试用例系统里面的case
@allure.issue()缺陷对应缺陷管理系统里面的链接
@allure.description()用例描述测试用例的描述
@allure.step()操作步骤测试用例的步骤
@allure.severity()用例等级blocker,critical,normal,minor,trivial
@allure.link()链接定义一个链接,在测试报告展现
@allure.attachment() 附件报告添加附件
                       
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!