pytest

四个字的测试目标: 多快好省

多---- 并发量大
快---- 用时短
好---- 稳定性好
省---- 省资源

一、pytest单元测试框架

(1)什么是单元测试框架
   单元测试框架是指在软件开发当中,针对软件的最小单位(函数,方法)进行正确性检查测试
(2)单元测试框架
   Java:junit和testng
   pyhton:unittest和pytest
(3)单元测试框架主要工作
    * 测试发现:从多个文件里找到我们的测试用例
    * 测试执行:按照一定的顺序和规则去执行,并生成结果
    * 测试结果:通过断言判断预期结果和实际结果的差异
    * 测试报告:统计测试进度,耗时,通过率,生成测试报告

二、单元测试框架和自动化测试框架的关系

(1)自动化测试框架:由一个或多个自动化测试基础模块、自动化测试管理模块、自动化测试统计模块等组成的工具集合。
(2)自动化测试框架的作用:
    * 提高测试效率,降低维护成本
    * 减少人员干预,提高测试的准确性,增加代码的重用性
    * 核心思想是让不懂代码的人也能通过这个框架实现自动化测试
(3)pytest单元测试框架和自动化框架的关系
    * 单元测试框架: 只是自动化测试框架的组成部分之一
    * pom(Page Object Model)设计模式: 只是自动化测试框架的组成部分之一
    * 数据驱动,关键字驱动,全局配置文件封装,日志监控,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
    pytest-xdist 测试用例分布执行,多CPU分发
    pytest-ordering 用于改变测试用例的执行顺序
    pytest-rerunsfailures 用例失败后重跑
    pytest-html 生成HTML格式的自动化测试报告
    allure-test 用于生成美观的测试报告

    安装:可以全部放到requirements.txt中,
    通过:pip install -r requirements.txt 命令一次性安装

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

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

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

1. 主函数模式
    (1)运行所以:pytest.main(['-vs'])
    (2)指定模块:pytest.main(['-vs','./testcase/test_login.py'])
    (3)指定目录:pytest.main(['-vs','./testcase'])
    (4)通过nodeid指定用例运行:nodeid由模块名,分隔符,类名,方法名,函数名组成
        pytest.main(['-vs','./testcase/test_login.py::test_04_func'])
        pytest.main(['-vs','./testcase/test_login.py::TestLogin::test_01_baili'])
    (5)分布式:pytest.main(['-vs','./testcase','-n 3'])
    (5)失败重跑:pytest.main(['-vs','./testcase','--reruns=2'])
2. 命令行模式
    (1)运行所以: pytest
    (2)指定模块: pytest -vs ./testcase/test_login.py
    (3)指定目录: pytest -vs ./testcase
    (4)分布式:   pytest -vs ./testcase -n 2
    (5)失败重跑   pytest -vs ./testcase --reruns 2

    参数详解:-s 表示输出调试信息,包括打印信息
        -v 详细的信息 类名 方法名 打印信息等
        -vs 两个参数一起使用
        -n 支持多线程或者分布式
        --reruns num 重跑
        -x 只要有一个用例报错 停止测试
        --maxfial=2 出现两次用例失败就停止
        -k "包含字符串的用例" 根据测试用例的部分字符串 指定用例
        --html ./report/report.html: 生成html的测试报告


3. 通过读取pytest.ini配置文件,pytest.ini的内容如下:
    [pytest]
    # 命令行参数 多个同时使用时 用空格分开
    addopts = -vs
    # 测试用例文件夹
    testpaths = ./interface_testcase
    # 配置测试搜索的模块文件名称
    python_files = test_*.py
    # 配置测试搜索的类名
    python_classes = Test*
    # 配置测试搜索的函数名
    python_functions = test
    markers =
        smoke:冒烟用例
        usermanager:用户名管理模块
        productmanager:产品管理模块

六、 pytest执行测试用例的顺序

unitest:ASCII的大小来绝对的执行顺序
pytest默认从上到下
使用mark标记可以改变执行顺序
@pytest.mark.run(ordering=num) 改变执行顺序

七、分组执行

smoke: 冒烟用例,分布在各个模块里
pytest -m "smoke"
pytest -m "somkr or 自定义字符串 or 自定义字符串"

八、pytest跳过测试用例

(1)无条件跳过
@pytest.mart.skip(reason="笑笑太漂亮")
(2)有条件跳过
@pytest.mart.skip(age<=18,reason="未成年")

九、pytest框架一些前后置的处理,常用三中种

(1)setpu/teardown,setup_class/teardown_class
    setup: 在每个用例之前只执行一次
    teardown: 在每个用例之后只执行一次
    setup_calss: 在每个类的所有用例之前执行一次
    teardown_class: 在每个类的所有用例之后执行一次
(2)使用@pytest.fixture()装饰器来实现部分用例的前后置
    @pytest.fixture(scope="",params="",autouse="",ids="",name="")
    scope:表示的是被pytest.fixture标记的作用域,function(默认),class,module,package/session.
    params:参数化(支持列表[],元组(),字典列表[{},{}],字典元组({},{}))
    autouse=True:自动执行,默认False
    ids:当使用参数化是,给每一个值设置一个变量名
    name:表示的是被@pytest.fixture标记的方法取一个别名,当取了别名原来的名字无法使用
(3)通过使用conftest.py和@pytest.fixture()结合使用实现全局的前后置应用(比如:项目的全局登录,模块的全局处理)
    1)conftest.py文件是单独存放的一个夹具配置文件,名称不能更改
    2)用处可以在不同的py文件中使用同一个fixture函数
    3)原则上conftest.py需要和运行的用例放在同一层,并且不需要做任何导入操作

十、pytest结合allure-pytest插件生成allure测试报告

(1) 安装allure  https://github.com/allure-framework/allure2
    命令安装
    mac 安装命名:brew install allure
    win 安装命令:scoop install allure 若没有安装scoop需要先安装scoop
    下载安装: 下载安装包,解压,配置环境变量
    mac https://www.jianshu.com/p/47e5bafee82d
    win https://www.cnblogs.com/strive-2020/p/12630067.html
(2) 生成json格式的临时报告
    --alluredir ./dirname
(3) 生成allure报告
    os.system('allure generate ./dirname -o ./report --clean')
    allure generate 固定命令
    ./dirname 临时的json格式报告的路径
    -o 输出output
    ./report 生成allure报告的路径
    --clean 清空原来的报告

allure 的安装教程
Mac
win

学习demo

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

推荐阅读更多精彩内容