pytest+Allure使用

一、pytest常见插件

是基于python 的单元测试框架

常见的插件:

pytest-html (生成简易的HTML报告) pytest-xdist(多线程执行)
pytest-ordering(修改测试用例的执行顺序)
pytest-rerunfailures (失败用例重跑)
pytest-base-url(管理基础路径:测试环境,开发环境,线上环境)
allure-pytest(生成allure报告)

作用:
1.发现用例(根据它默认的规则找到测试用例)
2.执行用例
3.判断结果
4.生成报告

二、pytest默认规则

1.模块名必须以test_开头或者_test结尾
2.测试类必须以Test开头,并且不能带有init(初始化)方法。
3.测试方法必须以test开头

三、pytest执行

1. 命令行执行

常用命令行:

pytest 
pytest -vs                  			 #-s输出调试信息 -v输出详细信息
pytest -n=2	 			    				#指定多个线程执行 
pytest --reruns=2		    				#失败用例重跑2次
pytest -x 									#出现一个失败用例就停止
pytest ---maxfail=2 						#出现2个失败用例就停止
pytest --html=./reports/result.html			#生成html报告
pytest -m "login" 							#指定执行login标记模块
pytest -m "login or product" 		
pytest --alluredir=./temps --clean-alluredir   #指定allure报告生成临时文件位置					

在这里插入图片描述

在这里插入图片描述

2. 主函数执行

import pytest

if __name__ == '__main__':
 pytest.main(["-vs"])

在这里插入图片描述

3. 通过pytest.ini配置文件执行

不管是命令行执行还是主函数执行,都会自动化的去读取这个配置文件执行。
pytest.ini文件是pytest的全局配置文件,放到项目的跟路径。
如果pytest.ini文件中写了中文注释,那么就需要把编码格式改成GBK

[pytest]

#命令行参数
addopts= -v -s

#指定测试用例文件夹
testpaths= ./testcases

#修改默认模块规则
python_files=test_*.py

#改变默认的类规则
python_classes = Test*

#改变默认的用例规则
python_functions = test_*

#环境变量
base_url=

#用例标记分组
markers =
 login:登陆模块
 product_manager:商品管理
 user_manager:用户管理

用例标记使用pytest.mark.名称
在这里插入图片描述

四、pytest.mark标记

pytest.mark.标记名

pytest.mark.run(order=1)			 #指定执行顺序

pytest.mark.skip()					 #跳过用例
pytest.mark.skip(reason="跳过") 		
pytest.mark.skipif(a<10,reason="跳过")

pytest.mark.usefixtures("sql")       #类级别手动调用固件

pytest.mark.parametrize("变量名","测试数据")  #实现数据驱动参数化


五、pytest前后置

  def setup(self):
        print("每个用例之前执行")

  def teardown(self):
        print("每个用例之后执行")

  def setup_class(self):
        print("类之前执行")
        
  def setup_class(self):
        print("类之后执行")

六、pytest的fixture固件

@pytest.fixture(scope="作用域",params="参数化",autouse="自动执行",ids="参数化时改变参数名称",name="别名")
scope:
	function 函数,默认
	class 类
    module 模块
	package/session 会话(通话),web项目中:从登陆到登出。
autouse
	True 自动调用
	False 手动调用
params:
	参数化 传值通过request和request.param

1.function级别使用

1.1自动调用:
在这里插入图片描述
1.2手动调用:
在这里插入图片描述

2.class级别使用

2.1自动调用,加上后置处理:
在这里插入图片描述
2.1手动调用
在这里插入图片描述

3.module模块级别使用

一般都是自动调用,在当前模块有效
在这里插入图片描述

4.session会话级别使用

指定用例文件夹下的所有会话

在这里插入图片描述

5.conftest.py文件

固件放在conftest.py下,名字固定。
放在根目录、用力下、模块内都能识别,作用域不一样。
执行顺序:从外层到内层执行,若在同一个conftest里,按照ASCII码顺序执行。

6.params参数化

在这里插入图片描述

7.ids

用于指定params参数的别名,必须和params一起使用
在这里插入图片描述

7.name

固件别名,使用别名后,手动调用固件时也只能用别名
在这里插入图片描述

七、pytest生成allure报告

1.安装allure-pytest

2.官网下载allure包 https://github.com/allure-framework/allure2/releases

配置环境变量:

在这里插入图片描述
在这里插入图片描述
3.生成临时json报告

addopts= -v -s --alluredir=./temps --clean-alluredir

–alluredir 指定临时报告的文件夹
-clean-alluredir 每执行一次自动清除原来的报告

4.生成html报告

import os
import time

import pytest

if __name__=='__main__':
    pytest.main()
    time.sleep(3)
    os.system("allure generate ./temps -o ./reports --clean")
	
	//files_name="./reports/report_"+str(int(time.time()))
    // os.mkdir(files_name)
    //time.sleep(3)
    //os.system("allure generate ./temps -o "+files_name+" ./reports --clean")

-o output 输出
–clean 每执行一次自动清除原来的报告

在这里插入图片描述
在这里插入图片描述

八、allure定制

1.定制logo

在这里插入图片描述
定制logo图片和css样式,如下图所示:
在这里插入图片描述

2.定制项目名称

在每一个类上加@allure.epic("项目名称:项目1")

在这里插入图片描述
在这里插入图片描述

3.定制模块名称

在每个类上指定该类模块名@allure.feature("用户管理模块")
在这里插入图片描述
在这里插入图片描述

4.定制接口名称

在用例上添加@allure.story("登录接口")

在这里插入图片描述

5.定制用例名称

在用例上添加allure.title()或者在用例里加上allure.dynamic.title("查询用例")

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

5.定制用例描述

在用例里加上allure.dynamic.description("查询用例用于实现验证查询是否成功")或者用例上@allure.description("用例的描述1")
在这里插入图片描述
在这里插入图片描述
Description英文可以在类上添加描述修改

6.定制用例严重级别

BLOCKER致命,CRITICAL严重,NORMAL一般,MINOR提示,TRVIAL轻微
在这里插入图片描述
在这里插入图片描述

7.定制用例链接

@allure.link("接口访问的链接")
@allure.issue("bug链接")
@allure.testcase("测试用例链接")

在这里插入图片描述
在这里插入图片描述

8.定制用例步骤

在这里插入图片描述
在这里插入图片描述

9.定制用例附件

在用例里添加

with open("E:\\shu.jpg",mode="rb") as f:
 allure.attach(body=f.read(), name="登陆错误截图",
attachment_type=allure.attachment_type.JPG)

10.局域网访问

allure open ./reports

九、pytest参数化

用例参数化有excel或yaml形式

1. YAML详解

yaml是一种数据类型,扩展名为.yaml或.yml

作用:
配置文件:环境变量、数据库信息、用户名密码、日志格式
测试用例:web、api、app

语法规则:
1.区分大小写
2.缩进表达层级,一般用空格
3.通过#注释
4.字符串可以不写引号,也可以写单引号或双引号。单引号会对特殊字符转义

常用数据类型:
1.标量(基本类型)
整形
浮点型
字符串
布尔型
null
日期时间

data1: 123
data2: 123.5
data3: True
data4: 码尚教育
data5: null
data6: 2022-4-20 20:25:30
data7: {"a": 1, "b": [1, 2, 3]}

2.对象(字典)
键:(空格)值
{键:(空格)值}

3.数组(列表),使用一组横线"-"开头的数据。

1 第一种:
2 - a
3 - b
4 - c
5 第二种:
6 ['a', 'b', 'c']
 - data1: 123
 - data2: 123.5
 - data3: True
 - data4: 码尚教育
 - data5:
 	- a
 	- b
 	- c
 - data6: 2022-4-20 20:25:30
 - data7: {"a": 1, "b": [1, 2, 3]}

数据类型转换

- data1: !!int "123"
- data2: !!float "123"
- data3: !!str 123
- data4: !!bool true
- data5: !!null null
- data6: !!timestamp 2022-4-20
- data7: !!set {a,b,c}
- data8: !!seq [a,b,c]
- data9: !!map {"a":"b"}
- data10: !!binary E:/shu.jpg

引用

使用&设置锚点
使用*引用
在这里插入图片描述

在这里插入图片描述
将引用的字典合并到列表里使用<<:
在这里插入图片描述

2. YAML操作

1.下载插件

pip install pyyaml

2.读写操作

#读取yaml文件
def read_yaml(yaml_path):
    with open(yaml_path,encoding="utf-8",mode="r") as f:
        value=yaml.load(f,yaml.FullLoader)
        //value=yaml.safe_load(f)
        return value

#写入yaml文件
def write_yaml(yaml_path,data):
    with open(yaml_path,encoding="utf-8",mode="w") as f:
        value=yaml.dump(data,stream=f,allow_unicode=True)


#清空
def clear_yaml(yaml_path,data):
    with open(yaml_path,encoding="utf-8",mode="w") as f:
       f.truncate()

3. @pytest.mark.parametrize()结合YAML实现数据驱动

@pytest.mark.parametrize("变量名","数据")

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值