ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

pytest初理

2022-09-07 19:32:05  阅读:233  来源: 互联网

标签:框架 pytest 初理 测试用例 测试 自动化 test


接口自动化测试

python

json.loads() # 把json转换为字符串格式

json.dumps # 把字符串转换为json格式

pytest 用户管理框架

一. pytest 单元测试框架

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

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

  1. 什么是自动化测试框架
    1. 他就是自动化测试组长针对一个项目开发的一个代码框架,这个框架封装了很多基础模块,报告模块等等。
  2. 作用
    1. 提高测试效率,降低维护成本
    2. 减少人工干预,提高测试准确性,增加代码复用性
    3. 核心思想是让不懂代码的人也能够通过这个框架去实现自动化测试
  3. pytest单元测试框架和自动化测试框架的关系
    1. 单元测试框架:只是自动化测试框架中的组成部分之一
    2. pom设计模式:只是自动化测试框架中的组成部分之一
      数据驱动。。。
      关键字驱动。。。
      全局配置文件的封装
      日志监控
      selnium,requests二次封装
      断言
      报告邮件
      更多.....

三. pytest简介

  1. pytest是一个非常成熟的python的单元测试框架,比unittest更灵活,容易上手
  2. pytest可以和selenium,requests,appium结合实现web自动化,接口自动化,APP自动化。
  3. pytest可以实现测试用例的跳过以及reruns失败用户重试
  4. pytest可以和allure生成非常美观的测试报告
  5. pytest可以和jenkins持续集成
  6. pytest有很多非常强大的插件,并且这些插件能够实现很多使用的操作
    1. pytest
    2. pytest-html # 生成html格式的自动化测试报告
    3. pytest-xdist 测试用例分布式运行,多cpu分发
    4. pytest-ordering 用户改变测试用例的执行顺序
    5. pytest-rerunfailures
    6. allure-pytest 用户生成美观的测试报告
      pip install -r requirement.txt

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

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

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

参数详情:

  1. -s :表示输出调试的信息,包括print打印的消息
  2. -v :表示详细的方式
  3. -vs :这两个参数可以合并
  4. -n :支持分布式或者多线程运行测试用例:
  5. --reruns NUM :失败测试用例重跑
  6. -x :表示只要有一个用例报错,测试停止
  7. --maxfail=2 :出现连个用例失败,停止
  8. -k: 根据测试用例的部分字符串指定测试用例
  9. --html ./report/report.html: 生成html的测试报告
  1. 主函数模式

    1. 运行所有的用例:pytest.main()
    2. 指定模块:pytest.main(['-vs','test_login.py'])
    3. 指定目录:pytest.main(['-vs','./interface_test'])
    4. 通过nodeid指定用例运行:nodieid有模块名,分隔符,类名,方法名,函数组成
      1. pytest.mian(['-vs','./interface_test/test_interface.py::test_04_func'])
      2. pytest.main(['-vs','./interface_test/test_interface.py::Testinterface::test_03_zhillao'])
  2. 命令行模式

    1. 运行所有:pytest
    2. 指定模块:pytest -vs test_login.py
    3. 指定目录:pytest -vs ./interface_test
    4. 指定nodeid:pytest -vs ./interface_test/test_interface.py::Testinterface::test_03_zhillao
  3. 通过读取pytest.ini配置文件运行
    pytest.ini这个文件它是pytest单元测试框架的核心配置文件

    1. 位置:一般放在项目的根目录
    2. 编码:必须是ANSi
    3. 作用:改变pytest默认的行为
    4. 运行的规则:不管是主函数的模式运行,命令行模式运行,都会去读这个配置文件
      """ini
      [pytest]
      addopts = -vs
      testpaths = ./testcases
      python_files = test.py
      python_classes = Test

      python_functions = test_*
      markers =
      smoke: 冒烟测试
      """

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

unittest:ascll的大小来绝对的执行顺序
pytest:默认从上到下
改名默认的执行顺序:使用mark标记
@pytest.mark.run(order=1)

七. 如何分组执行(冒烟,分模块执行,分接口和分web执行)

smoke:冒烟用例,分布在各个模块
pytest -m "smoke"
pytest -m "smoke or "usermanage or productmanage"

八. pytest 跳过测试用例

  1. 无条件跳过
    @pytest.mark.skip(reason="没有条件")
    @pytest.mark.skipif(age>=18,reason="已成年")

day02

pytest框架实现一些前后置(固件、夹具)的处理,常用三种

一、setup/treardown,setup_class/teardown_class

为什么需要这些功能?
比如:web自动化执行用例之前,请问需要开发浏览器吗?用例执行后需要关闭浏览器?

"""mysql
class TestDemo:

def setup(self):
    print('\n这个是每个测试用例之前执行\n')

def teardown(self):
    print('\n这个是每个测试用例执行之后执行\n')

def setup_class(self):
    print('这个是每个类之前之前执行')

def teardown_class(self):
    print('这个是每个测试类之后执行')

def test_ganme_01(self):
    print('this is game1')

def test_game_02(self):
    print('this the game2')

def test_game_03(slef):
    print('this is game3')

"""

二、 使用@pytest.fixture()装饰器来实现部分用例的前后置。

@pytest.fixture(scope="",params="",autouse="",ids="",name="")
scope表示的是被@pytest。fixture标记的方法的作用域。function(默认),class,module,package/session
params:参数化
autouse = Ture:自动执行,默认为False
ids:当使用params参数化时,给每一个值设置一个变量名,意义不大。
name:给表示的是被@pytest.fixture标记的方法取一个别名。

三、通过confftest.py和pytest.fixture()结合使用实现全局的前置应用(比如:项目的全局登录,模块的全局处理)

  1. conftest.py 文件是单独存放的一个夹具配置文件,名称不能修改
  2. 用处可以在不同的py文件中使用同一个fixture函数
  3. conftest.py需要和运行的用例放到统一层

四、断言

assert
assert 1==2

五、 pytest结合allure-pytest插件生成allure报告

allure-pytest

  1. 下载解压配置path路径

    1. https://github.com/allure-framework/allure2/releases
    2. path:$/bin
    3. 生成临时的allure报告的json文件:addopts = -vs --alluredir ./temp --clean-alluredir
    4. python 代码设置:os.system(r"allure generate ./report/tmp -o ./report/html --clean")
  2. allure 报告参数修改

day03

三、 接口自动化测试矿建关于接口关联封装

安装:pyyaml

策略:去掉全局变量,用YAML文件带起保存

企业落地实时:问题

需要处理的问题:

  1. 一个接口一个yaml文件,如果说我一个接口有30条用例,那么yaml文件会很庞大
  2. 有些接口参数是动态的,这种怎么处理
  3. 断言封装
  4. 文件上传
  5. 日志模块
  6. 投入和产出比,深度思考:关于如何能够做到你自己吧框架封装好之后,其他的测试不需要写代码,也可以实现接口自动化

测开:

  1. 业务测开:平台写好,直接使用。功能测试都可以做
  2. 平台测开:在自动化框架的思想上能够自主的搭建平台
    1. 开发转测试
    2. 自动化测试做了2-3年,对框架非常熟练,转测试开发。

POM自动化

  1. 自动化测试框架是如何实现的

  2. 关键字驱动

  3. POM

    1. pageObjectModule 页面对象模型,在web和appUI中,最为核心的一种,也是业内公认最佳的一种模型
    2. eg:

讲流程所关联的页面作为对象,讲对象串联起来,形成一个个不同的流程

pom的实现

  1. 结构设计
    1. 逻辑代码 :实现所有函数的封装,类似与关键字的驱动的设计模式,
    2. 页面对象代码: 通过系统页面,通过调用工具函数,来实现业务的操作,生成对应的页面对象,页面对象类
    3. 测试代码: 基于测试需要,组件页面对象,实现核心流程的自动化执行,测试用例
    4. 测试数据: 为测试用例执行提供所需要的测试数据
  2. 提取系统的页面:
    1. 基于结构设计与页面的业务需求实现编码

yaml 文件的处理

用途:

  1. 用于做配置文件
    1. 配置全局的数据:环境变量,数据库信息,账号信息,日志的格式,报告的名称
  2. 用于写测试用例(接口自动化测试用例,用于数据驱动)

一、YAML的简介
yaml是一种数据格式,支持注释,换行,多行字符串,裸字符串(不可分割的,最最少的字符串)。

二. YAML 语法规则

  1. 大小写敏感(区分大小写)
  2. 使用缩进表示层级关系
  3. 缩进不管空格的数量,只要层级的左侧是对其的就ok
  4. 使用# 来表示注释

三. YAML 和json的差异

JSON

  1. Map对象:键值对。(字典)
    1. 使用{}括起来,如:{name:永乐,age:30}
  2. 数组,(列表list)
    1. 使用[]搓起来,如:[{name:永乐,age:10},{name:赵哥,age:11}]

YAML

  1. Map 对象:建:(空格)键值对(字典dict)

    1. 如:
      msxy:
      name:永乐
      age:18
      一般的写法:{name:永乐,age:18}
  2. 数组,(列表list),用一组横行“-”开头
    如:
    msxy:
    -name:永乐
    -age:18
    一般的写法: msxy:[{name:永乐},{age:18}]

四. 读取和写入yaml文件

pyyaml 第三方模块

什么时候用date,什么时候用json

headers:content-ype:application/json 用json
headers:content-type:x-www-from-urleadcode

标签:框架,pytest,初理,测试用例,测试,自动化,test
来源: https://www.cnblogs.com/zhaoyopngle/p/16667002.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有