【自动化总结1】pytest使用整理

1. 环境(pytest 和allure 环境)

        1. pip intall pytest------ pip show pytest

        2. pip install pytest-sugar   --命令行运行更好看

        3. pip install pytest-html  原生态报告模板

        4. pip install allure-pytest

        5. allure的压缩包解压后配置环境变量-----能够执行allure命令

1. pytest 框架

用例编写规则:三test

        “三test“ : test**.py   Test***类  test***方法

用例运行

两种运行模式(在setting—tools—python Intergrated Tools)

1.Pytest运行模式:

        点击小箭头即可运行、右键run运行也可以(pytest模式下不会执行到mian下的代码)

unitest运行模式:

  • 可以执行到main下的代码,通过pytest.main来收集用例并执行,并生成报告
    •         pytest.main([__file__])  #  __file__ 表示当前目录
      •         pytest.main(['test_***.py', '-s' ])  #  -s为打印信息,如有print就会打印出来 
        •         pytest.main(['test_***','-s','--alluredir', '../report/tmp'])  # 生成报告 + 报告路径
          •         pytest.main(['test_login.py','-s','--alluredir','../report/tmp','--clean-alluredir']) # 清空之前的报告 +再生成报告

除了使用  --clean-alluredir 参数清空之前的报告文件,还可以使用如下笨方法

打开报告的两种方法

打开报告方式1:启动allure服务

 allure serve “报告路径” (推荐)

打开报告方式2:生成html文件等报告文件

allure generate “报告路径” –o生成html的路径” –-clean (clean表示清除之前html)  

方式2的好处,通过浏览器看报告时,路径时没有变化的。但也只能看最新的。

24年8月4日, --clean的参数需要改成下面这样才能生效了,而且可以不指定路径,他好像是自己在当前目录建了一个 allure-report的文件

os.system(f'allure generate {report_path} "--clean"  "-o" {allure_html_path}')

命令行运行

命令行运行的参数和unittests模式下main中的写法类似,参数是一样的

pytest test_***.py –s  

命令行运行,做一个bat用例文件

 或者直接这么写,也能删除

cd ./testCase

pytest -s --alluredir ../outFiles/report/tmp --clean-alluredir

allure serve ../outFiles/report/tmp

用例运行筛选
用例筛选执行  -m

装饰器的 跳过  ,skip

 在回归测试里面,开发修改了一个业务的bug,需要对部分接口做业务测试,就可以筛选出对应的业务模块的接口

mark标签

  • 模块、类、方法都可以加上标签  
  • 定义:@pytest.mark.shop_list  
  • 运行时  pytest -s  -m 标签名     pytest,main(['---.py','-m','标签名'])

 给测试类,方法打标签,执行标签运行deselected表示未选中的用例数

打了标签之后,会出现一些警告,pytest不认识这些标签

  • 工程目录下,新建pytest.ini
  • 插件下载  setting plugins  搜索 ini (安装后才有图标)

pyttest.ini中定义标签,让pytest认识标签,解除警告

-m的其他用法

-k(推荐)

-k, -v

 如果想在接口下,再筛选具体的用例,利用读取excle来筛选

pass-50期

补充,根据allure的级别来运行

但要先提前指定,用@allure.serverity('') 来指定

skip装饰器跳过

pytest中的跳过用例---------记录在面试题回答里

命令行中,运行时  -s,改成 rs,会更好的展示原因(命令窗口中)

在自动化测试过程中,会遇到功能阻塞,功能未实现,就可以用跳过 skip 用例,这样可以IBU用注释掉 或者删除掉, 特别是在ui自动化中,执行一个用例需要几十秒时间

并且设置跳过 在allure报告中是可以看见的,是置灰的

无条件的跳过

@pytest.mark .skip(renson='列出接口后端没有实现,暂时不运行')

有条件的跳过

@pytest.mark .ifskip(2>1,renson='列出接口后端没有实现')

前面是表达式,如果为真,就跳过

工作中,可以把装饰器定义成变量,其他地方可以快速写

 skipif的用法:

用例筛选工作中实际用法,使用run文件跑部分业务

比如要运行单个某个业务模块(商铺)

1. 可以写  一个run.py文件  ,运行时,用 python run.py

        (1) 每次运行时改配置文件

        cd 到这个testCase

        pytest -s  -m  shop_list

2. 写个bat文件 (每次运行都需要改文件)

 初始化和清除

使用介绍

自动化用例尽量保证用例和用例之间没有关系,都能单独运行,所有要设置初始化和清除

方式1:setup 和 teardown (方法级别、类级别、模块级别)

方式2:@pytest.fixture() 装饰器,更加灵活,可以设置范围,可以部分用例使用

  注:

1.    scope有function(默认)   class   module(一个.py)    package/session

        (1) module , package/session 都是写在conftest.py中的

        (2) package代表包 seesion代表能共享conftest的所有文件,和package差不多

2.   方式2的优先级优先于方式1,如下面的例子中方式2的function范围可以看出

3.  当方式2,不是自动调用时autouse=Flase 默认的,有两种调用方式,如下图

4.  当初始化有返回值时,不能用@pytest.mark.usefixtures("**") 方式

5. conftest.py 中的方式2 优先于 用例中的方式2

6. 把方式2的初始化和清除写在conftest.py中,(共享的初始化清除

yield区分是初始化还是清除,并且可以用来返回值

 

   1.手动调用pytest的fixture两种方式(autouse为False的时候)

方式1:可以使用usefixtures装饰器

方式2:也可以直接把 初始化函数名当成参数传个用例(适用有返回值的)(如下图)

2.pytest的fixture (默认是function)更优先unittest的 setup和teardown

autouse 参数的用法

conftest特点

优先级:conftest中的fixture优先于py文件中的fixture

作用域:conftest文件是有作用域的,内层的用例能调到外层的fixture

以前的使用场景

不同项目下,都有个conftest,写了module前置登录自己项目,然后存token等

也可以利用 setup_class(self): 初始化实现登录,可做特殊账号的登录

针对用例做的初始化,一般设置为function范围,自己调用

pytest自带的数据驱动(参数化)

使用介绍

        可以将数据,传入用函数中

        格式: [[],[],[]]  或者 [(),(),()]

 使用过的场景

可以获取excle中的每行用例,然后一个数据得到一个字典,传给用例

 

 重复执行查看稳定性

 @pytest.mark.repeat(2)  # pip install pytest-repeat  #


pytest的断言

使用pytest.assume(a == b)断言,断言失败后后续代码还能继续跑 pip install pytest-assume

写法2: with pytest.assume:

3. allure库及jinkens的allure插件的应用

环境:

        1.下载allure.zip ,解压,把\bin目录添加到环境变量path---能使用allure 命令

        2.pip install allure-pytest

(1) allure的装饰器介绍

1.@allure.description_html 可以添加html标签

2.@allure.description() 这种,直接加字符串

3.allure.attach()

a.可用来在报告中显示执行结果: 两个方式,推荐下面的方式

allure.attach( "{0}".format(res),"用例结果")

allure.attach(f"{res}", "其他变量或字符串", allure.attachment_type.TEXT)

b.展示图片、mp4等

allure.attach(file,"附件名字",allure.attachment_type.JPG)

 

4.标题层级

@allure.epic("电子证照")

@allure.feature("电子驾驶证")

@allure.story("车辆选择列表")

@allure.title("{inData[testPoint]}")    双引号中用 大括号

        其中@allure.title 可以用变量,其他暂时没发现可以, 可以用另一个方式在方法中写

        allure.dynamic.title(title)

如:以上inData是一个字典,注:[]中不要写引号

5.with allure.step("支付"): 可以给步骤取名字,可以对一些流程用例的

也可以在某个方法上面写 装饰器 (这样可以展示参数)

补充,但不怎么用,

         写allure.dynamic.severity("minor")  设置标签,不设置是normal

         或者装饰漆@allure.serverity()

应用

pytest结合allure来用例进行过滤

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值