自从学了这套框架,自动化+性能都搞定了(1)

发表于:2021-10-26 09:37

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:软件测试自动化测试    来源:掘金

  框架介绍
  1、HttpRunner
  是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份YAML/JSON脚本,即可实现自动化测试性能测试、线上监控、持续集成等多种测试需求。
  2、Locust
  Locust是一款易于使用的分布式用户负载测试工具。它用于对网站(或其他系统)进行负载测试,并确定系统可以处理多少并发用户。HttpRunner 通过复用Locust ,可以在无需对 YAML/JSON 进行任何修改的情况下,直接运行性能测试。
  3、 httprunner使用手册
  附httprunner中文使用文档地址:cn.httprunner.org/
  环境安装
  1 安装httprunner:   pip install httprunner==2.2.5
  2 安装har2case:    pip install har2case
  3 检查安装是否成功:hrun -h/-v;har2case -h/-v
  4 安装locust:    pip install locustio
  新增命令
  在 HttpRunner 安装成功后,系统中会新增如下 5 个命令:
  1 httprunner: 核心命令。
  2 hrun: httprunner 的缩写,功能与 httprunner 完全相同。
  3 locusts: 基于 Locust 实现性能测试。
  4 har2case: 辅助工具,可将标准通用的 HAR 格式(HTTP Archive)转换为YAML/JSON格式的测试用例
  用例生成
  (1)利用fiddler/charles对接口数据进行抓包,将结果导出为XX.har文件。
  (2)将导出的XX.har文件转化为json文件/yaml文件。
  转化为json文件:har2case  xx.har
  转化为yaml文件:har2case  xx.har   -2y/--to-yml
  (3) 转化成功后的yaml文件如下:
  status_code: 请求的状态码
  headers.Content-Type: 将响应头的内容格式做验证
  content.msg: 响应内容的关键字作为验证
  config: 作为整个测试用例集的全局配置项,包括变量(variables,name)
  test: 对应单个测试用例
  name 这个test的名字(用例的名称)
  request 这个test具体发送http请求的各种信息, 如下:
  url 请求的路径 (若config中有定义base_url, 则完整路径是用 base_url + url )
  method 请求方法 POST, GET等等
  headers: 请求头
  请求体: json格式的数据
  validate(断言): 完成请求后, 所要进行的验证内容. 所有验证内容均通过该test才算通过,否则失败.
  参数化:
  testcases:
  -
  name: call demo_testcase with data 1
  testcase: testcases/test_login.yml
  parameters:
  #      username: ["admin1","admin"]
        -username:
          - ["admin1"]
          - ["admin"]
  测试用例(testcase)嵌套testcases
  测试用例集是测试用例的无序集合,集合中的测试用例应该都是相互独立,不存在先后依赖关系的。
  如果确实存在先后依赖关系怎么办,例如登录功能和下单功能。正确的做法应该是,在下单测试用例的前置步骤中执行登录操作。
  - config:
     name:order product
  - test:
     name:login
     testcase:testcases/login.yml
  - test:
     name:add to cart
     api:api/add_cart.yml
  - test:
     name:make order
     api:api/make_order.yml
  变量取值:
  在测试用例内部,HttpRunner划分了两层变量空间作用域context。
  ·config:作为整个测试用例的全局配置项,作用域为整个测试用例;
  · test:测试步骤的变量空间context会继承或覆盖config中的定义的内容;
    - 若某变量在config中定义了,在某test中没有定义,则该test会继承该变量
    - 若某变量在config中和某test中都定义了,则该test中使用自己定义的变量值
  · 各个测试步骤test的变量空间相互独立,互不影响;
  · 如需在多个测试步骤test中传递参数值,则需要使用extract关键字,并且只能从前往后传递
  响应头和响应体的提取:
  //response headers:
  {
     “Content - Type”:"application/json",
     “Content - Length”:69
  }
  //response body:
  {
      “success”:false,
       “person”:{
           "name":{
            “first_name”:"cs",
            “last_name”:"css",
       },
        “age”:29,
        “cities”:["Guangzhou","Shenzhen"]
       }
  }
  那么对应的字段提取方式就为:
  “headers.content-type”=>"application/json"
  “headers.content-length”=>69
  “body.success"/"content.success"/"text.success=>false
  "content.person.name.first_name"=>"cs"
  "content.person.age"=>29
  "content.person.cities"=>["Guangzhou","Shenzhen"]
  "content.person.cities.0"=>"Guangzhou"
  "content.person.cities.1"=>"Shenzhen"
  可以看出,通过点( . )运算符,我们可以从上往下逐级定位到具体的字段:
  ·当下一级为字典时,通过.key来指定下一级的节点,例如.person,指定了content下的person节点;
  · 当下一级为列表时,通过.index来指定下一级的节点,例如.0,指定了cities下的第一个元素。
  提取HTML的内容(正则表达式)
  上传文件场景

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号