pytest测试实战

pytest.org 为pytest的官网地址

安装 pip install pytest

文件以test_开头或_test结尾,类以Test开头,方法以test_开头。

git操作,在git上创建一个空的项目(没有readme),在gitbash中执行命令$ ssh-keygen -t rsa -C "你的邮箱" 不需要密码的情况下直接回车到生成成功本地pub证书,打开证书,将证书信息粘贴到git的ssh设置位置。在pycharm的terminal中执行git给的的git命令进行提交。


git原理图


pytest --collect-only 只收集用例,观察执行用例的顺序

pytest -k "关键字" 执行带某些关键字的用例,"testcase" "add or div"

pytest xxx.py -vs 可以看到打印输出,否则pytest时不显示打印输出的。

@pytest.mark.login 可以自定义标签,还没在pytest.ini配置文件中添加该标签时,运行会出现告警错误。ini的内容为:[pytest] markers = login 换行 另外一个标签,使用pytest -m login 执行带该标签的用例

pytest --junitxml=./result.xml 可以生成一个测试结果的xml数据。

pytest --setup-show 回溯fixture的执行过程。

pytest --help 可以查看pytest命令的一些可用参数。

如果使用pytest执行,需要先在setting中进行pytest的配置,搜索pytest,将tools下面的选项选中pytest进行配置。

setup,teardown框架结构。在setup中进行实例化,需要在左边定义的实例对象加self.在后面的测试用例方法调用该实例也需要带self.实例名。这样就不需要在每个测试用例方法中都各实例化一次。在测试用例方法中实例化为a=b() b是一个在其他文件中定义的类,需要先导入该测试文件。有模块级(优先级最高),setup_module/teardown_module,函数级(不在类中),setup_function/teardown_function,类级setup_class/teardown_class,方法级运行于方法始末优先级高于单独的setup,setup_method/teardown_method,类里面的运行在调用方法的前后,setup/teardown ,fixture是类似于该框架的一个方式。

参数化:在方法或类上方加一个@pytest.mark.parametrize("字符串,多个用逗号隔开",[列表,多个列表就用方括号括起来,用逗号分隔])。可以在方法或类下的所有方法执行时引用参数。为了方便查看用例执行的名称,可以加ids=['对应前面的列表数量,中间逗号隔开']。参数化主要提取的是变化的数据,不变的数据不需要提取。当连续存在多个变量的参数化装饰器,会以笛卡尔积的形式,从内往外匹配生成多个参数化数据的完整组合。如果把数据放到yaml文件中,就是数据驱动的方式。

测试数据类型可以分类管理。浮点型数据因为二进制转换后会存在一些循环,如所以如果不做位数限制,就会无法校验成功。位数限制可以调用四舍五入方法round(算式或方法或变量,保留的位数)。小数转二级制的方法:小数乘二,看整数位。0.1的二进制就是0.00001100... 

捕获异常,可以使用try: except Exception:来包住,Exception是会捕获所有异常的,如果要捕获某些特定类型的错误,需要对捕获的错误进行细分,如zeroxxx 是除数为0的具体错误。

yaml文件中,列表嵌套列表。可以有多种方式。读取yaml文件的方式 with open ("./datas/calc.yaml") as f:     datas =yaml.safe_load(f)    return datas

datas:

 -

  - 1

  - 2

- [a,b]

ids:

- ['c','d']

需要先装yaml包,pip install pyyaml,多种安装方式都可。

fixture与setup teardown配置不同的是,可以单独引入,而不用多个同时引用。应用方法,@pytest.fixture(),可以传到普通方法,也可以传到fixture方法中,一个方法中可以传多个fixture。def 普通方法名(fixture方法名): 是直接使用方法名调用的方式。还有一种方法是@pytest.mark.usefixtures('login'),在测试用例前加装饰器,该方法在被应用方法有return值时,也不会返回返回值,不推荐使用。fixture在pytest上有用法介绍。@pytest.fixture()中可以带的参数有fixture方法、autouse参数不带默认为Flase,设置为True之后,就会在所有用例使用。作用域scope:session>module>class>function(默认)。pytest --setup-show xx.py可以看到fixture的实际使用情况。在fixture方法中使用yield,相当于return,有返回值,且还会执行teardown操作,即在yield后面的操作还会继续执行。

conftest.py 可以存储fixture方法,不需要导入就可以在测试文件中直接调用。该文件名固定不可改成其他的。放在项目下,是全局数据存储的地方。如果不同目录下有多个conftest.py文件,会先从近的找,近的没有,去父级目录找,不会找兄弟目录下的conftest。

fixture参数化,在fixture装饰器方法里面带params=[]参数,在fixture方法中调用request方法,调用request.param获取参数。还可以带ids=[]参数,用来对返回值进行用例名的格式化。fixture代替类的setup、teardown时,可以创建fixture方法,使用scope='class',并在方法中实例化对象,并使用yield 实例化对象进行对象的传递,在用例中,可直接调用该方法来调用类方法,而不需要使用self。fixture参数化是返回一个列表数据,索引列表下标可以取出列表中对应的数据。在测试类中,加载出该fixture,最终在测试类中的调用方式如下:


pytest插件

内置插件:pytest内置的 hook 函数

外部插件: 通过pip 安装的插件

本地插件: fixture 自定义的插件内容,放在 conftest.py 文件中,pytest 会自动的发现这些插件

pip install pytest-ordering 控制用例的执行顺序,在pytest上搜索后点击homepage进入github说明页,配合注释器@pytest.mark.second 或者@pytest.mark.run(order=1)等顺序参数使用。其中的hook函数pytest_collection_modifyitems(session,config,items)可以放到conftest中。用来自定义用例顺序,比如将方法应用的items:List 改为列表类型后,再使用items.reverse()来翻转列表顺序。还可以对用例集的字符进行转码。增加一个用例集的循环,并在循环内设置item.name=item.name.encode('utf-8').decode('unicode-escape'),item._nodeid=item.nodeid.encode('utf-8').decode('unicode-escape')python的external库的site_package下的pytest中有一个Hookspec文件,里面有所有的hook函数。可以通过源码https://github.com/ftobia/pytest-ordering/blob/develop/pytest_ordering/__init__.py中的item.add_marker(pytest.mark.run(order=order))方法来给方法打标签如item.add_marker(pytest.mark.foo)

item.nodeid=item.nodeiitem.nodeid.encode('utf-8').decode('unicode-escape')

pip install pytest-dependency 控制用例的依赖关系

pip install pytest-xdist 分布式并发执行测试用例 按照cpu核数随机分配用例给不同的核

pip install pytest-rerunfailures 失败重跑

pip install pytest-assume 多重校验 使所有断言都被执行(正常碰到断言失败就会停止)

pip install pytest-radom-order 用例随机执行

pip install pytest-html 测试报告


如果需要被引用,则package下需要有init文件。

allure测试报告生成

安装java 环境 建议jdk 1.8版本

allure 下载地址:Central Repository: io/qameta/allure/allure-commandline/2.13.8 1 安装 allure环境,配置bat文件所在地址为环境变量

安装 allure-pytest库 pip install allure-pytest

Allure help 帮助文档

生成 allure 测试结果 :pytest --alluredir=./report/

展示报告:allure serve ./report

生成最终版本的报告: allure generate ./report

在本地搭建一个网站服务(例如:Django)

python manage.py runserver (http://127.0.0.1:8000/ 2)

@allure.feature("大分类名")

@allure.story("小类别名")

pytest.ini文件,通过pytest --help查看pytest.ini的一些配置信息。注释使用分号开头,在文件中加入python_files = 需要自定义被收集的用例文件名(不用带引号,多个值,中间用空格隔开)。其他还有日志、addopts = -vs --alluredir=./result --clean-alluredir等命令行参数的默认值。

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

推荐阅读更多精彩内容

  • 夜莺2517阅读 127,717评论 1 9
  • 版本:ios 1.2.1 亮点: 1.app角标可以实时更新天气温度或选择空气质量,建议处女座就不要选了,不然老想...
    我就是沉沉阅读 6,887评论 1 6
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,532评论 28 53
  • 兔子虽然是枚小硕 但学校的硕士四人寝不够 就被分到了博士楼里 两人一间 在学校的最西边 靠山 兔子的室友身体不好 ...
    待业的兔子阅读 2,597评论 2 9