pytest框架

一、ptest单元测试框架

1)什么是单元测试框架

单元测试是指在软件开发当中,针对软件的最小单位(函数、方法)进行正确的检查测试

2)单元测试框架

java:junit和testing

python:unittest和pytest

3)单元测试主要做什么?

1、测试发现:从多个文件里面去找到我们测试用例

2、测试执行:按照一定顺序和规则去执行,并生成结果

3、测试判断:通过断言判断预期结果和实际结果的差异

4、测试报告:统计测试进度、耗时、通过率、生成测试报告

二、单元测试框架和自动化测试框架有什么关系?

1)什么是自动化测试框架

2)作用

1、提高测试效率、降低维护成本

2、减少人工干预,提高测试的准确性,增加代码的重要性

3、核心思想史让不懂代码的人也能够通过这个框架去实现自动化测试

3)pytest单元测试框架和自动化测试框架的关系

单位测试框架:只是自动化测试框架中的组成部分之一

pom设计模式:只是自动化测试框架中的组成部分之一

数据驱动...

关键字驱动

全局配置文件的封装

日志监控

selenium,requests二次封装

断言

报告邮件

更多.....

三、pytest简介

1、pytest是一个非常成熟的python的单元框架、比unittest更灵活、容易上手

2、pytest可以和selenium,requests,appium结合实现web自动化,app自动化,接口自动化

3、pytest可以实现测试用例的跳过以及reruns失败用例重试

4、pytest可以和allure生成非常没关的测试报告

5、pytest可以和jenkins持续集成

6、pytest有很多非常强大的插件,并且这些插件能够实现很多的使用操作

#插件介绍

pytest-html(生成html格式的自动化测试报告,此场景用于如testReport中点击index.html)

pytest-xdist(测试用例分布式执行多CPU分发,此场景用于-n参数使用前必须安装的插件)

pytest-ordering(用于改变用例的执行顺序,此场景用于装饰器@pytest.mark.run(order=NUM)使用前必须安装的插件)

pytest-rerunfailures(用于失败用例重跑)

allure-pytest(用于生成美观的测试报告,此场景用于-reruns NUM参数使用前必须安装的插件)

一个一个安装有点麻烦,可以新建一个requirements.txt文件,通过在pycharm的Terminal中pip install -r requirements.txt一次性安装

四、使用pytest,默认的测试用例的规则以及基础应用

1、模块名必须以test_开头或者以_test结尾

2、测试类必须以Test开头,并且不能有init方法

3、测试方法必须以test开头

五、参数详解

-v:将调式信息展示出来,包括print打印信息

-s:将详细执行的哪条信息展示出来

-vs:结合以上信息

-n:多线程、分布式运行测试用例,提升执行用例时间(命令用法:“pytest -vs ./testcase -n 2”;主函数用法:pytest.main(["-vs","./testcase","-n=2"]))

--reruns NUM:失败用例重跑,NUM等于几就重跑几次(命令用法:pytest -vs ./testcase --reruns 2;主函数用法:pytest.main(["-vs","./testcase","--reruns=2"])

-x:只要有一个用例报错,那么测试停止(命令用法:pytest -vs ./testcase -x;主函数用法:pytest.main(["-vs","./testcase","-x"])

-maxfail=2 :只要有两个用例报错,那么测试停止(命令用法:pytest -vs ./testcase -maxfail 2;主函数用法:pytest.main(["-vs","./testcase","-maxfail=2")]

-k:根据测试用例的部分字符串指定测试用例,如只想执行所有带user字符串的用例(命令用法:pytest -vs ./testcase -user "user";主函数用法:pytest.main(["-vs","./testcase","-k=user"))

--html ./TestReport/index.html:生成html测试报告(pytest -vs --html ./TestReport/index.html)TestPeport为自己新建放报告的文件夹,index为具体报告生成名

六、pytest测试用例的运行方式

1、主函数(main)

1)运行指定模块如testcase下test_article_addHotCnt.py,此方法场景运用于运行该模块中所有用例(如放到单个模块下调试用)

if __name__ == '__main__':

pytest.main(['-vs','test_article_addHotCnt.py'])

2)运行指定目录如testcase下所有用例,此方法场景运用于运行该目录下所有test_开头的所有用例(如放到testRun里)

if __name__ == '__main__':

pytest.main(['-vs','./TestCase'])

3)运行指定目录下指定模块下的指定用例,此方法场景运用于指定某个单条用例

if __name__ == '__main__':

pytest.main(['-vs','./TestCase/test_article_addHotCnt.py::Test_article_addHotCnt::test_addHotCnt_success'])

4)直接运行所有test_或_test结尾的用例

if __name__ == '__main__':

pytest.main(['-vs'])

2、命令

1)运行指定模块(模块中所有用例将被执行)

pytest -vs test_article_addHotCnt.py

2)运行指定目录(目录下所有模块的所有用例将被执行)

pytest -vs TestCase

3)运行指定目录下指定模块,指定模块下指定类,指定类下的指定方法(指定模块下的指定的用例将被执行)

pytest -vs ./TestCase/test_article_addHotCnt.py::Test_article_addHotCnt::test_addHotCnt_success

4)直接运行所有test_或_test结尾的用例

pytest -vs

3、通过读取pytest.ini配置文件运行

pytest.ini这个文件它是pytest单位测试框架的核心配置文件

1、位置:一般放到项目根目录

2、编码:必须是ANSI可以使用notpad++修改编码格式

3、作用:改变pytest默认的行为

4、运行规则:不管是主函数还是命令行模式运行,都会去读取这个配置文件

5、配置文件的固定写法

[pytest]

  #命令行参数,用空格分隔

addopts = -vs -n --reruns 2...

  #测试用例路径(测试用例文件夹,可自己配置,比如你想把testcase换成hahah这里就写../hahah)

testpaths = ../testcase

  #模块名的规则(配置测试搜索的测试类名,可以自己配置,比如你想把testcase下所有模块改为haha开头才会被执行,这里就写haha_*.py)

python_files = test_*.py

  #类名的规则(配置测试搜素的测试类名,可以自己配置,比如你想把类名已haha开头才会被执行,则改为Haha*)

python_classes = Test*

  #方法名的规则(配置测试搜索的函数名,可以自己配置,比如你想函数名以aaa开头的才会被执行,则改为aaa)

python = test

  #定义被标记执行的用例,标记名自定义非固定(比如:smoke可以自定义为aaa)

markers =

    smoke:冒烟测试

article:文章模块

patient:患者模块

...

七、pytest执行测试用例顺序

1)默认从上到下执行

2 )装饰器@pytest.mark.run(order=NUM),用于改变默认的执行顺序,标记用例执行顺序,放到用例前,NUM等于几用例就第几个执行

八、如何分组执行(场景:冒烟、分模块执行、同一个项目里面分接口和ui执行)

在用例前使用装饰器@pytest.make.“标记名”,标记名取配置文件markers中自定义的名称

smoke:冒烟用例,分布在各个模块里面

pytest -vs -m“smoke”  #执行所有标记了@pytest.make.smoke的用例

pytest -vs -m“smoke or article”      #执行所有标记了@pytest.make.smoke和@pytest.make.article的用例

九、跳过用例

1、无条件跳过

@pytest.mark.skipif(reason='跳过测试')

2、有条件跳过

例:定义一个变量age=18

@pytest.mark.skipif(age>=18,reason='测试有条件跳过') #当装饰器中有age=18这个条件才跳过,如果是小于或者大于18则不跳过

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,548评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,069评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,985评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,305评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,324评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,030评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,639评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,552评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,081评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,194评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,327评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,004评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,688评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,188评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,307评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,667评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,337评论 2 358

推荐阅读更多精彩内容