前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何用airobots进行接口测试

如何用airobots进行接口测试

作者头像
归根落叶
发布2021-03-24 17:59:11
8550
发布2021-03-24 17:59:11
举报

上篇介绍了如何用airobots进行web自动化测试,这期,给大家介绍如何用airobots进行接口测试。

下载demo项目(可选)

airobots可直接通过命令执行用例文件或用例目录来进行测试:

代码语言:javascript
复制
airobots -t api 用例文件或用例目录路径

但通常,为了更方便管理我们的测试脚本和开发一些自定义方法,我们都会对用例脚本做一些组织,用不同的目录来区分不同的作用,demo是我在项目中的组织方式,大家也可以按自己的习惯进行。demo下载地址:https://github.com/BSTester/AirobotsDemo。项目目录结构说明,大家可以看上一期文章:如何利用airobots做web自动化测试。

运行示例脚本

airobots只是对目前流行的开源框架做了集成和封装,本质上接口测试是基于httprunner进行的,所以,用例格式和编写方式都是按httprunner的方式。我们先来运行下示例脚本:

代码语言:javascript
复制
airobots -t api --clean-alluredir --alluredir=Results --reruns=1 TestCases/APICase/test_suite_demo.yml

以上命令表示:执行接口测试,自动清理结果目录,生成allure格式报告,用例执行失败后重试1次。看到以下运行结果即表示测试完成。

执行以下命令查看测试报告

代码语言:javascript
复制
allure serve Results

测试报告

如何编写测试用例

httprunner支持三种格式的用例,python,json和yaml。airobots集成的是httprunner最新的V3版本,V3的特点是支持链式调用方式编写python脚本,但我还是喜欢yaml格式的方式编写用例,方便直观。

❝httprunner V3版帮助文档:https://docs.httprunner.org/ httprunner V2版帮助文档:https://v2.httprunner.org/ ❞

这里主要给大家介绍一下yaml格式用例文档的编写方式,以演示用例的登录接口为例。

用例文件:TestCases/APICase/api_demo/login.yml

代码语言:javascript
复制
config:
    name: 登录演示测试
    verify: false
    base_url: $base_url
teststeps:
-   name: /v1/login
    request:
        headers:
            content-type: application/json;charset=UTF-8
        json:
            password: test1234
            username: '13279297419'
        method: POST
        url: /v1/login
    validate:
    -   eq:
        - status_code
        - 200
    -   eq:
        - body.status
        - 0
    extract:
        token: body.data.token

对于初次接触yaml文件的同学,可以先通过https://www.runoob.com/w3cnote/yaml-intro.html了解yaml文件的基本语法。对于我们日常编写测试用例,记住以下几个点就足够用了。

  • 三种数据类型
    • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
    • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
    • 纯量:单个的、不可再分的值
  • 支持多层级,变量名称以变量名:开头,冒号后面有空格。
  • 直接接在变量名后面的为纯量类型的值,比如:name: test代表name="test",name=123代表name=123
  • -开头的行表示构成一个数组, 注意需要换行,比如: name: - test - 123 - - key - value 表示name=["test", 123, ["key", "value"]]
  • 对象键值对使用冒号结构表示key: value,冒号后面要加一个空格。比如: name: key: value key1: - test - 123 表示{"name":{"key":"value", "key1":["test", 123]}}

了解以上语法后,我们再来看用例编写格式就容易理解多了。

用例配置文档分为两部分,configteststeps,即用例公共配置部分和具体的测试步骤。

config主要包含:测试名称name,被测接口的域名base_url

teststeps主要包含:测试步骤名称name,接口请求配置request和断言的配置validate

测试步骤中的request配置又主要包含:请求的链接url(如果不带域名会自动拼接base_urlurl),请求的方式:method,请求头配置headers以及请求参数jsondataparams(GET方式)和文件上传upload

了解了以上的参数,就可以编写一条测试用例了,实际工作中,我们更多的会参数化很多变量,configteststeps都包含一个参数化参数variables。更多的用法可以参考官方文档,这就不在赘述。

编写好用例后,我们可以单独执行这条用例,也可以将多条用例组合成一个测试集进行测试。

测试集文件:TestCases/APICase/test_suite_demo.yml

代码语言:javascript
复制
config:
    name: 登录演示测试
    variables: 
        base_url: https://td.dia03.com
testcases:
-   name: 登录
    order: first
    testcase: TestCases/APICase/api_demo/login.yml
    export: ['token']
-   name: 获取菜单
    order: second_to_last
    testcase: TestCases/APICase/api_demo/menu.yml
-   name: 获取个人信息
    testcase: TestCases/APICase/api_demo/info.yml

跟测试用例的配置,不同在于将teststeps换成了testcasestestcases主要包含:测试用例名称name、测试用例文件路径testcase(需要填写相对于项目根目录的路径)。这样,执行测试集文件就会将配置的测试用例一起执行了。

原则上,我们编写的测试用例之间不应该有依赖关系,测试集的执行默认也不是按用例的引用顺序从上到下执行的,而是随机的,用例之间应该可以独立执行,以不至于一个用例失败后,影响其他的用例执行。

但很多时间,我们希望按一定流程来执行用例。比如必须先登录才可以请求其他接口。对于这个问题,airobots引入了一个新的变量order,可以指定执行顺序。比如给登录接口配置order: firstorder: 1,这样登录接口的用例会第一个执行,其他用例会随机执行。

大家注意到了,登录接口用例中还有一个参数export,这个是导出变量的参数,将变量导出给后续的用例引用。这里导出了token这个变量,与之对应的是测试步骤中的extract变量,用来给token赋值。

代码语言:javascript
复制
    extract:
        token: body.data.token   # {"data":{"token": "xxxxxxxxx"}}

以上配置表示,将接口响应body中的token赋值给token变量。

如何录制脚本

以上,我们简单介绍了用例的编写格式,实际工作中,我们不可能每个用例都这样手工来配置,那效率就太低了。更多时候,我们都是通过工具来帮助我们快速生成用例,下面介绍几种常用的快速生成用例的方法。

将Har文件转换成用例

HAR,即HTTP存档格式(HTTP Archive format),是一种JSON格式的存档文件格式,用于记录网页浏览器与网站的交互过程。

一般,har文件可以通过抓包工具导出,也可以通过chrome浏览器保存得到。

通过Fiddler抓包工具抓取到接口后,选择需要导出的接口,通过如下路径导出har文件。

Fiddler抓包导出

F12,打开Chrome浏览器,切换到Network页,选择xhr后,操作页面,得到页面的请求接口后,在下方接口列表中右键,通过以下图示路径保存har文件。

Chrome开发者模式导出

比如,我们保存到了项目目录的SourceFiles/test.har中。

har文件内容

执行以下命令进行转换:

代码语言:javascript
复制
har2case -2y SourceFiles/test.har

SourceFiles目录中得到test.yml文件,已经按httprunner的用例格式生成,再根据我们的实际需要,删掉一些不需要的接口配置,参数化一些配置即可。

转换后得到的yaml文件

将Postman文件转换成用例

当然,有时候我们也会在开发阶段介入测试,根据跟开发约定好的接口文档来手动测试,这时候就没法通过抓包来进行了,更多时候我们会使用像Postman这类的接口测试工具来调试接口。我们也可以将调试好的接口快速的转换成接口自动化测试用例。

通过Collections - Export,选择v2.1版本,导出保存,比如保存为SourceFiles/Test.postman_collection.json

Postman导出

执行以下命令转换成用例:

代码语言:javascript
复制
pm2case SourceFiles/Test.postman_collection.json

在生成测试用例文件的同时,会自动化生成测试集文件。

Postman转换成yml文件

测试用例文件

测试集文件

得到生成好的测试用例文件后,再根据实际需求编辑即可。

通过插件录制接口

除了以上两种方式外,我比较喜欢也是推荐的一种方式。通过chrome插件MeterSphere JMX Recorder进行录制。MeterSphere是一款优秀的开源测试全周期管理平台,支持接口测试和性能测试。感兴趣的同学可以了解一下。插件下载地址:https://github.com/metersphere/chrome-extensions/releases

安装好插件后,就可以通过插件进行录制了。

修改测试名称和录制内容,启动测试

MeterSphere JMX Recorder插件

修改测试用例名称,进行页面功能操作,此时会看到右边括号中的数字在变化,表示已经录制到了请求。

录制接口

停止录制后,选择编辑

停止录制

在编辑器中,删除不需要的接口。

编辑接口

将编辑好的接口列表导出为json格式文件。

导出为json文件

例如,保存为SourceFiles/登录测试演示.json文件。

导出的json文件

执行以下命令将json文件转换成测试用例

代码语言:javascript
复制
ms2case SourceFiles/登录测试演示.json

转换为yaml文件

跟Postman转换一样,会同时生成测试用例文件和测试集文件,根据实际需求修改后即可。

❝这里需要注意的是,每次转换生成的yaml文件,都是从数字1开始为文件名的,如果需要将多个测试用例或则测试集一起执行,文件名不能重复,在将yaml文件转换成python文件执行时,后面转换的文件会覆盖掉前面先转换的,这里需要留意。 ❞

高级技巧

定义用例执行顺序

很多时间,我们希望按一定流程来执行用例。比如必须先登录才可以请求其他接口。httprunner本身并不支持,它的用例设计原则就是希望用例之间不要有依赖关系,相互独立,这样我们可以随时指定用例进行测试,如果需要有先后顺序,可以嵌套引用用例,在用例里的teststeps中引用需要先执行的用例,teststeps是按顺序执行的。但是,这样有些用例就变成其他用例的步骤,步骤不会统计为用例数,这部分用例就会被重复执行。对于这个问题,airobots引入了一个新的变量order,可以指定执行顺序。比如给登录接口配置order: firstorder: 1,这样登录接口的用例会第一个执行,其他用例会随机执行。

定义用例执行顺序

失败重试

有时候,我们希望用例执行失败后,重复尝试几次,这个也很简单,在执行命令中加入参数--reruns=N即可,N代表需要重试的次数。比如:

代码语言:javascript
复制
airobots -t api --clean-alluredir --alluredir=Results --reruns=2 TestCases/APICase/test_suite_demo.yml

这样,当一条用例执行失败后,会立即重新尝试执行最多2次。

性能测试

httprunner自带将接口用例转换成性能测试的功能,执行以下命令即可。

代码语言:javascript
复制
locusts -f TestCases/APICase/TEST_Test_testSuite.yaml

性能测试

然后在浏览器中打开:http://localhost:8089/

在打开的locust的配置页面,填写总的并发用户数,生成并发的频率,测试的域名即可进行测试,更多说明请参考locust官网https://www.locust.io/

性能测试配置

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-03-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 贝克街的捉虫师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 下载demo项目(可选)
  • 运行示例脚本
  • 如何编写测试用例
  • 如何录制脚本
    • 将Har文件转换成用例
      • 将Postman文件转换成用例
        • 通过插件录制接口
        • 高级技巧
          • 定义用例执行顺序
            • 失败重试
            • 性能测试
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档