2.httprunner-yaml用例结构
阅读原文时间:2023年07月08日阅读:5

前言:

  • httprunner3.x版本弱化了api层的概念
  • 直接在testcase中写request请求
  • 如果是单个请求,也可以直接写成一个testcase
  • 每个testcase必须具有两个类属性:config和teststeps

config

每个测试用例都应该有一个config部分,可以在其中配置用例级别,有以下属性

name: 指定测试用例名称 这将显示在执行日志和测试报告中-必填

base_url: 如果base_url指定,则testsetp中的url可以设置相对路径部分-选填

verify: https请求时,是否校验证书,默认为True,忽略证书校验可以设置为FALSE-选填

variables: 指定测试用例的公共变量,每个测试步骤都可以引用未在步骤变量中设置的配置变量
换句话说步骤变量比配置变量具有更高的优先级-选填

export: 早期版本是output,指定导出的测试用例会话变量,把变量暴露处理设为全局变量-选填

teststeps

yaml中testsetps步骤参数,testsetps是一个list,可以有多个步骤

name: 指定测试步骤-必填

request:指定测试步骤变量,参数引用变量"$变量名"-必填

variables:指定测试步骤变量,参数引用变量"$变量名"-选填

extract: 提取返回结果-可选

export: 导出测试用例会话变量,设为全局变量-可选

validate: 校验返回结果

示例

config:
  name: 登录用例

teststeps:
-
  name: step-登录
  request:
    url: http://xxx.com
    method: POST
    json:
      username: test
      password: "12345"
  validate:
    - eq: [status_code,200]
    - eq: [body.msg,login success]

base_url

base_url是部署环境地址

部署环境地址和端口是有可能会变,如test、uat、pre环境等

config:
name: 登录用例

teststeps:

name: step-登录
request:
url: http://xxx.com/v1/login/

如上所示,request参数中url是整体的请求地址,如果我们下面有多个步骤要更改或者请求环境更改就需要修改全部步骤的url

我们可以配置base_url来实现简单操作,如下,有需要变更直接修改base_url地址,config中设置了base_url,teststpe中值需要写接口相对路径

config:
  name: 登录用例
  base_url:  http://xxx.com

teststeps:
-
  name: step-登录
  request:
    url:/v1/login/

如果config设置了base_url,但是下面的接口步骤中的url写了绝对路径,也可以请求成功,不会冲突

 如果config base_url之后没有其他的请求路径,那么在request中可以 url: /,但是不可以不写

variables变量声明与引用

  • teststeps中变量对当前step有效
  • config中变量在整个yaml中都生效

局部变量

在teststeps中,使用variables声明局部变量,格式也是键值对

然后当前步骤调用,使用$变量名进行调用,每个步骤中的variables只对当前步骤有效

config:
  name: 登录用例

teststeps:
-
  name: step-登录
  variables: #声明局部变量
    user: test
    password: "12345"
  request:
    url: http://xxx.com/v1/login/
    method: POST
    json:
      username: $user #调用局部变量
      password: $password
  validate:
    - eq: [status_code,200]
    - eq: [body.msg,login success]

 全局变量

在config中使用variables声明全局变量,格式也是键值对

在config声明的全局变量,下方所有步骤都可以调用

config:
  name: 登录用例
   variables: #声明全局变量
    user: test
    password: "12345"

teststeps:
-
  name: step-登录
  request:
    url: http://xxx.com/v1/login/
    method: POST
    json:
      username: $user #调用全局变量
      password: $password
  validate:
    - eq: [status_code,200]
    - eq: [body.msg,login success]

如果局部变量和全局变量有同名变量,那么优先级局部变量>全局变量

validate校验结果

使用jmespath提取json响应正文并使用预期值进行验证

-jmes_path:jmespath表达式

-expect:预期值,这里也可以使用指定的预期值、变量或函数引用
-message消息(可选):用于指示断言错误原因

httprunner请求源码片段

    resp_obj_meta = {
        "status_code": self.status_code,
        "headers": self.headers,
        "cookies": self.cookies,
        "body": self.body,
    }

我们使用httprunner成功请求一个接口,会返回四个字段

status_code :请求状态码
headers:请求头
cookies:请求cookies
body:响应正文,一般是json格式

我们根据上述格式进行验证

jmes_path表达式,expect预期值,message消息(可选)断言失败原因

# 简单示例
validate:
  - eq: [status_code,200] #校验请求状态码是200
  - eq: [headers.Content-Type,appliction/json] #校验请求头类型是json
  - eq: [body.code,0] #校验返回值内容的code是0
  - eq: [body.msg,success,msg返回不一致] #校验返回值的msg是success,如果不是,提示原因msg返回不一致
  - len_eq: [body.token,40] # 校验返回值的token长度是40

upload

upload关键字专门用于文件上传

teststeps:

name: step-登录
request:
url: /v1/login/
method: POST
upload:#上传文件
file: data/test.png
title: '封面'
setup_hooks:
- ${setup_hook()}
- ${request_sign($request)}
teardown_hooks:
- ${teardown_hook()}