pytest测试框架+allure超详细教程

2023-12-19

1、测试识别和运行

文件识别:

  • 在给定的目录中,搜索所有test_.py或者_test.py文件

用例识别:

  • Test*类包含的所有test_*的方法(测试类不能有__init__方法)
  • 不在类中的所有test_*方法
  • pytest也能执行unit test写的用例和方法

运行方式
1、pycharm页面修改默认的测试运行方式
settings页面,输入pytest,修改Default test runner

2、右键执行python文件
3、命令行界面执行,点击pycharm下方的terminal,打开命令行界面,执行pytest 命令

4、pycharm代码边界界面,左侧单条用例运行按钮

5、主函数运行方式
在运行文件中编写主函数,主函数启动需要导入pytest包,不然找不到pytest方法

1

2

3

4

5

6

7

8

9

10

11

12

13

14

import pytest

class TestClass:

def test_one( self ):

x = "this"

assert "h" in x

def test_two( self ):

x = "hello"

assert hasattr (x, "check" )

if __name__ = = '__main__' :

#    pytest.main()

pytest.main( "test_study.py" )

pytest.main()会自动读取当前目录下的所有test开头的.py文件,运行test方法或者类

可以传入不同的参数,让运行更加定制化

1

2

3

4

5

6

7

8

pytest.main([ './' ]) # 运行./目录下所有(test_*.py  和 *_test.py)

pytest.main ([ './subpath1' ]) # 运行./subpath1 目录下用例

pytest.main ([ './subpath1/test_module1.py' ]) # 运行指定模块

pytest.main ([ './subpath1/test_module1.py::test_m1_1' ]) # 运行模块中的指定用例

pytest.main ([ './subpath2/test_module2.py::TestM2::test_m2_02' ]) # 运行类中的指定用例

pytest.main ([ '-k' , 'pp' ]) # 匹配包含pp的用例(匹配目录名、模块名、类名、用例名)

pytest.main([ '-k' , 'spec' , './subpath1/test_module1.py' ]) # 匹配test_module1.py模块下包含spec的用例

pytest.main([ '-k' , 'pp' , './subpath2/test_module2.py::TestM2' ]) # 匹配TestM2类中包含pp的用例

2、参数化

@pytest.mark.parametrize(argnames,argvalues)

  • argnames:要参数化的变量,可以是string(用逗号分割),list,tuple
  • argvalues:参数化的值,list[tuple],以列表形式传入元组,每个元组都是一条测试数据
  • ids,:默认为none,用来重新定义测试用例的名称

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

# 使用string分割参数化的变量

@pytest .mark.parametrize( 'a,b' ,[( 10 , 20 ),( 30 , 40 )])

def test_param(a, b):

print (a,b)

# 使用list分割参数化的变量

@pytest .mark.parametrize([ 'a' , 'b' ],[( 10 , 20 ),( 30 , 40 )])

def test_param(a, b):

print (a,b)

# 使用tuple分割参数化的变量

@pytest .mark.parametrize(( 'a' , 'b' ),[( 10 , 20 ),( 30 , 40 )])

def test_param(a, b):

print (a,b)

# 使用ids重新定义用例名称

@pytest .mark.parametrize( 'a,b' ,[( 10 , 20 ),( 30 , 40 )], ids = [ 'case1' , 'case2' ])

def test_param(a, b):

print (a,b)

yaml参数化
pip install PyYAML
yaml实现list

1

2

3

- 10

- 20

- 30

yaml实现字典

1

2

3

by: id

locator: name

action: click

yaml二维数组

1

2

3

4

5

6

7

8

9

10

11

12

companies:

- id: 1

name: company1

price: 200w

- id: 2

name: company2

price: 500w

fruites:

- name: 苹果

price: 8.6

- name: 香蕉

price: 2.6

读取yaml文件
yaml.safe_load(open(‘./data.yaml’))

3、测试报告美化-allure

1、操作系统内部先安装allure
2、安装allure-pytest插件

1

pip install allure-pytest

3、运行测试用例
查看pytest中allure相关的命令行参数

1

2

3

4

5

6

7

8

9

10

C:\Users\Administrator>pytest --help | findstr allure  <== linux 使用 grep 过滤

--allure-severities=SEVERITIES_SET     <==  根据用例级别过滤需要执行的用例

--allure-epics=EPICS_SET

--allure-features=FEATURES_SET         <== 根据用例设置的feature名称过滤需要执行的用例

--allure-stories=STORIES_SET           <== 根据用例设置的story名称过滤需要执行的用例

--allure-ids=IDS_SET  Comma-separated list of IDs.

--allure-link-pattern=LINK_TYPE:LINK_PATTERN

--alluredir=DIR       <== 指定存放用例执行结果的目录

--clean-alluredir     清除alluredir文件夹(如果存在)

--allure-no-capture   Do not attach pytest captured logging /stdout/stderr to

4、执行测试命令

1

2

# --alluredir: 用于指定存储测试结果的路径

pytest [测试文件] -vs --alluredir=. /result/ --clean-alluredir

5、查看测试报告

在线查看报告,直接打开默认浏览器展示当前报告

1

2

# 注意这里的serve书写,后面接用例执行结果(./result/:就是存放执行结果的目录路径)

allure serve ./result/

从结果生成报告
1.生成报告

1

2

# 注意:覆盖路径加--clean

allure generate . /result/ -o . /report/ --clean

2.打开报告

1

allure open -h 127.0.0.1 -p 8883 . /report/

allure常用特性
支持在报告中查看测试功能、子功能或场景、测试步骤和测试附加信息等,可以通过@feature、@story、@step和@attach等装饰器实现

实现的步骤

  • import allure
  • 功能上加@allure.feature(“功能名称”)
  • 子功能上加@allure.story(“子功能名称”)
  • 用例标题@allure.title(“用例名称”)
  • 用例描述@allure.description(“用例描述”)
  • 步骤上加@allure.step(“步骤细节”)
  • @allure.attach(“具体文本信息”),需要附加的信息,可以是数据、文本、图片、视频和网页
  • 用例级别@allure.severity(级别)
  • 如果只测试登录功能运行的时候,可以加限制过滤

1

2

3

# 注意这里--allure-features中间是-中线, 需要使用双引号

#  不能过滤--allure-features下的--allure-stories

pytest 文件名 --allure-features= "登录模块"

  • feature相当于一个功能,一个大模块,将case分类到某个feature中,报告中Behaviors(功能中展示),相当于testsuite
  • story相当于这个功能或者模块下的不能场景,分支功能,属于feature之下的结构,报告中features中展示,详单与tescase
  • feature与story类似于父子关系
  • 2、allure特性-step
  • 测试过程中每个步骤,一般放在具体逻辑方法中
  • 可以放在关步骤中,在报告中显示
  • 在app、web自动化测试中,建议每切换到一个新页面就做一个step
  • 用法:
  • @allure.step():只能以装饰器的形式放在类或者方法上面
  • with allure.step():可以放在测试用例方法里面,但是测试步骤代码需要被该语句包含

3、allure特性-testcase

关联测试用例,可以直接给测试用例的地址链接,一般用于关联手工测试用例
实力代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

import pytest

import allure

@allure .feature( '用户登录' )

class TestLogin:

@allure .story( '登录成功' )

def test_login_success( self ):

with allure.step( '步骤1:打开应用' ):

print ( '打开应用' )

with allure.step( '步骤2:进入登录页面' ):

print ( '进入登录页面' )

with allure.step( '步骤3:输入用户名和密码' ):

print ( '输入用户名和密码' )

print ( '这是登录成功测试用例' )

@allure .story( '登录失败' )

def test_login_fail( self ):

print ( '这是登录失败测试用例' )

@allure .story( '登录失败' )

@allure .title( '用户名缺失' )

def test_login_fail_a( self ):

print ( '这是登录失败测试用例' )

@allure .story( '登录失败' )

@allure .testcase( 'https://www.baidu.com/' , '关联测试用例地址' )

@allure .title( '密码缺失' )

@allure .description( '这是一个用例描述信息' )

def test_login_fail_b( self ):

with allure.step( '点击用户名' ):

print ( '输入用户名' )

with allure.step( '点击密码' ):

print ( '输入密码' )

print ( '点击登录' )

with allure.step( '点击登录之后登录失败' ):

assert '1' = = 1

按重要性级别 进行一定范围测试
通常测试用PO、冒烟测试、验证上线测试。按照重要性级别来分别执行
缺陷严重级别

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

1. Blocker级别——中断缺陷

客户端程序无响应,无法执行下一步操作。

2. Critical级别――临界缺陷,包括:

功能点缺失,客户端爆页。

3. Major级别——较严重缺陷,包括:

功能点没有满足需求。

4. Normal级别――普通缺陷,包括:

1. 数值计算错误

2. JavaScript错误。

5. Minor级别———次要缺陷,包括:

1. 界面错误与UI需求不符。

2. 打印内容、格式错误

3. 程序不健壮,操作未给出明确提示。

6. Trivial级别——轻微缺陷,包括:

1. 辅助说明描述不清楚

2. 显示格式不规范,数字,日期等格式。

3. 长时间操作未给用户进度提示

4. 提示窗口文字未采用行业术语

5. 可输入区域和只读区域没有明显的区分标志

6. 必输项无提示,或者提示不规范。

7. Enhancement级别——测试建议、其他(非缺陷)

1. 以客户角度的易用性测试建议。

2. 通过测试挖掘出来的潜在需求。

解决方法:

  • 通过附加pytest.mark标记
  • 通过allure.feature,allure.story
  • 也可以通过allure.servity来附加标记

步骤:
在方法,函数和类上面加: @allure.severity(allure.severity_level.TRIVIAL)
执行时过滤: pytest -vs [文件名] --allure-severities normal, critical

前端自动化测试-截图
前端自动化测试经常需要附加图片或html,在适当的地方,适当时机截图
@allure.attach 实现不同类型附件,可以补充测试步骤或测试结果
使用方式:

  • 在测试报告附加网页

1

2

allure.attach(body(内容), name, attachment_type, extension)

allure.attach( '<body>这是一段html</body>' , 'html测试' , attachment_type = allure.attachment_type.HTML)

在测试报告附加图片

1

2

allure.attach. file (source, name, attachment_type, extension)

allure.attach. file ( './123.jpg' , name = '这是一个图片' , attachment_type = allure.attachment_type.JPG)

示例代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

import allure

def test_attach_text():

allure.attach( '这是一个纯文本' , attachment_type = allure.attachment_type.TEXT)

def test_attach_html():

allure.attach( '<body>这是一段html</body>' , 'html测试' , attachment_type = allure.attachment_type.HTML)

def test_attach_phote():

allure.attach. file ( './123.jpg' , name = '这是一个图片' , attachment_type = allure.attachment_type.JPG)

def test_attach_video():

allure.attach. file ( './123.mp4' ,name = '这是一个视频' ,attachment_type = allure.attachment_type.MP4)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

import allure

from selenium import webdriver

import time

import pytest

@allure .testcase( 'https://www.baidu.com/' , '百度搜索功能' )

@pytest .mark.parametrize( 'data' ,

[ 'allure' , 'pytest' , 'unittest' ],

ids = [ 'search allure' , 'search pytest' , 'search unittest' ]

)

def test_search(data):

with allure.step( '步骤1:打开浏览器输入百度地址' ):

driver = webdriver.Chrome()

driver.implicitly_wait( 5 )

driver.get( 'https://www.baidu.com/' )

with allure.step(f '步骤2:在搜索框中输入{data}, 并点击百度一下' ):

driver.find_element_by_id( 'kw' ).send_keys(data)

driver.find_element_by_id( 'su' ).click()

time.sleep( 2 )

with allure.step( '步骤3: 截图保存到项目中' ):

driver.save_screenshot(f './result/{data}.jpg' )

allure.attach. file (f './result/{data}.jpg' , name = f '搜索{data}的截图' , attachment_type = allure.attachment_type.JPG)

allure.attach(driver.page_source, f '搜索{data}的网页内容' , allure.attachment_type.HTML)

with allure.step( '步骤4:关闭浏览器,退出' ):

driver.quit()

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你! 【100%无套路免费领取】

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pytest测试框架+allure超详细教程 的相关文章

随机推荐

  • 怎么用python画一个皮卡丘,用python画皮卡丘的代码

    大家好 小编来为大家解答以下问题 怎么用python画一个皮卡丘 用python画皮卡丘的代码 今天让我们一起来看看吧 给大家看看我的皮卡丘 电脑屏幕比较小 所以看不见假皮卡丘真实的身体 话不说上代码 import turtle as t
  • 课题立项查询怎么查 快码论文

    大家好 今天来聊聊课题立项查询怎么查 希望能给大家提供一点参考 以下是针对论文重复率高的情况 提供一些修改建议和技巧 可以借助此类工具 课题立项查询怎么查 在学术研究和项目申请中 了解课题立项信息对于研究者来说非常重要 快码写作 那么 课题
  • 持续集成交付CICD:K8S 自动化完成前端项目应用发布与回滚

    目录 一 实验 1 环境 2 GitLab新建项目存放K8S部署文件 3 Jenkins手动测试前端项目CD 流水线代码 下载部署文件 4 将K8S master节点配置为jenkins从节点 5 K8S 手动回滚前端项目版本 6 Jenk
  • 《LeetCode力扣练习》代码随想录——双指针法(替换数字---Java)

    LeetCode力扣练习 代码随想录 双指针法 替换数字 Java 刷题思路来源于 代码随想录 54 替换数字 受制于语言限制 普通解法 import java util Scanner class Main public static v
  • Set系列集合

    Set系列集系概述 Set系列集合特点 无序 存取顺序不一致 不重复 可以去除重复 无索引 没有带索引的方法 所以不能使用普通for循环遍历 也不能通过索引来获取元素 Set集合的功能上基本上与Collection的API一致 Set集合实
  • 想学习了解渗透测试?看完这一篇就够了

    一 什么是渗透测试 渗透测试 也称为笔测试 是针对计算机系统的模拟网络攻击 以检查可利用的漏洞 在这样的背景下Web 应用程序安全性方面 渗透测试通常用于增强 Web 应用程序防火墙 WAF 笔测试可能涉及尝试破坏任意数量的应用程序系统 例
  • 【功能更新】支持文档合并导出PDF/HTML格式;线上文章SEO设置能力优化

    HelpLook 功能更新速览 文档管理能力 1 导出支持多篇文档合在一个HTML文件 2 支持下载附件时保留原始文件名 3 主页 推荐文章 支持添加外链 4 文章URL根据标题自动生成 5 文章支持添加 作者 6 博客模版支持置顶文章 1
  • python打包exe failed to execute,python打包成exe 用不了

    本篇文章给大家谈谈python打包的exe有的电脑不能运行 以及python文件打包成exe文件运行报错 希望对各位有所帮助 不要忘了收藏本站喔 大家好 给大家分享一下一个有趣的事情 很多人还不知道这一点 下面详细解释一下 python t
  • Windows7系统ntoskrnl.exe文件丢失问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个ntoskrn
  • Python Plotly交互可视化详解

    今天给大家分享一篇可视化干货 介绍的是功能强大的开源 Python 绘图库 Plotly 教你如何用超简单的 甚至只要一行 代码 绘制出更棒的图表 沉没成本谬误 是人们常犯的几种认知偏差之一 由于在某件事上已经投入了 沉没 太多的成本 即使
  • 论文查重率太低怎么改能高一点 papergpt

    大家好 今天来聊聊论文查重率太低怎么改能高一点 希望能给大家提供一点参考 以下是针对论文重复率高的情况 提供一些修改建议和技巧 可以借助此类工具 论文查重率太低怎么改能高一点 在撰写论文时 有时会遇到查重率过低的问题 智能写作 这通常是因为
  • App(Android)ICP备案号查询——————高仿微信

    个人主页 拉莫帅 CSDN博客 博文 132篇 原创 130篇 转载 2篇 总阅读量 388923 粉丝量 112 感谢点赞和关注 每天进步一点点 加油 目录 工业和信息化部关于开展移动互联网应用程序备案工作的通知 1 前言 2 备案收费
  • 神州信息戴可分享金融数字化转型破局之道

    近日 第二十届中国国际金融论坛在中国上海拉开帷幕 在 金融科技赋能服务数字经济发展 为主题的平行论坛上 神州信息副总裁戴可发表 基于数云融合的AI Bank 的主题演讲 分享了公司在金融数字化转型方面的最新进展 全面阐释了 数云融合 如何助
  • 论文降重助手同义词替换 papergpt

    大家好 今天来聊聊论文降重助手同义词替换 希望能给大家提供一点参考 以下是针对论文重复率高的情况 提供一些修改建议和技巧 可以借助此类工具 标题 论文降重助手 同义词替换的妙用 一 引言 在论文写作过程中 我们常常会遇到重复内容的问题 为了
  • 病案管理的定义、流程及应用分析

    病案管理是指针对病人的基本信息 病历 就诊记录等进行收集 整理 存储 分析和应用的一项管理工作 它在医院 医疗机构和医疗行业中具有重要的作用 能够提高医疗服务的质量 效率和安全性 本文将就病案管理的定义 流程以及其在医疗健康领域中的应用进行
  • WarAgent使用多智能体理解人类历史和预防未来国际冲突

    我们能否避免历史十字路口上的战争 这个问题已经被个人 学者 政策制定者和组织在人类历史中追寻了很长时间 在这项研究中 我们尝试根据人工智能 AI 和大型语言模型 LLM 的最新进展来回答这个问题 本文试图通过使用人工智能和大型语言模型 回答
  • [黑马程序员TypeScript笔记]------一篇就够了

    文章目录 1 TypeScript 介绍 TypeScript 是什么 TypeScript 为什么要为 JS 添加类型支持 TypeScript 相比 JS 的优势 2 TypeScript 初体验 安装编译 TS 的工具包
  • IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Spring的AOP前奏

    第一章 AOP前奏 1 1 代理模式 代理模式 我们需要做一件事情 又不期望自己亲力亲为 此时 可以找一个代理 中介 我们 目标对象 与中介 代理对象 不能相互转换 因为是 兄弟 关系 1 2 为什么需要代理 程序中 需求 实现 加减乘除
  • python单元测试框架pytest介绍

    pytest是python语言中一款强大的单元测试框架 用来管理和组织测试用例 可应用在单元测试 自动化测试工作中 unittest也是python语言中一款单元测试框架 但是功能有限 没有pytest灵活 就像 苹果电脑mac air和m
  • pytest测试框架+allure超详细教程

    1 测试识别和运行 文件识别 在给定的目录中 搜索所有test py或者 test py文件 用例识别 Test 类包含的所有test 的方法 测试类不能有 init 方法 不在类中的所有test 方法 pytest也能执行unit tes