其他分享
首页 > 其他分享> > pytest初理

pytest初理

作者:互联网

接口自动化测试

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