httprunner-场景案例

1.关联参数

如何将上一个登录接口返回的token传给下一个接口当做请求参数
参数关联场景:1.登录返回token->2.下一个接口头部传token
extract提取变量
&token引用变量

config:
  name:get_join
  base_url:https://xx.xxx.xx.x:8001
teststeps:
-
  name:get_join
  request:
      method:GET
      url:/api/v1/goods
      json:
         username: 1
         password: 2
  extract:
       token:body.token
  validate:
  - eq:[status_code,200]
  - eq:[body.code,0]
  - eq:[body.msg,success]
  
-
      name:get_userinfo
  request:
      method:POST
      url:/api/v1/goods
      headers:
         Authorization:Token $token
      json:
          name:test
          sex:M
          age:20
          mail:xxx@qq.com
  validate:
  - eq:[status_code,200]
  - eq:[body.code,0]
  - eq:[body.msg,success]

2.环境变量

创建.env文件
base_url=http://
user=test
psw=123456

床架yaml文件
config:
  name:get_join
  base_url:${ENV(base_url)}
teststeps:
-
  name:get_join
  request:
      method:GET
      url:/api/v1/goods
      variables:
         username: ${ENV(user)}
         password: ${ENV(psw)}
  extract:
       token:body.token
  validate:
  - eq:[status_code,200]
  - eq:[body.code,0]
  - eq:[body.msg,success]

3.一个测试用例引用第二个测试用例

将登录用例设置成公共用例,其他用例执行前导入此用例
login_case.yaml

config:
    name:登录
    expect:
    -token
teststeps:
-
  name:step-login
  request:
      method:POST
      header:
          Content-type:
      url:https://
      data:
          username:admin
          password:"123456"
  extract:
       token:body.token
  validate:
  - eq:[status_code,200]
  - eq:[body.code,0]
  - eq:[body.msg,success]
updata_info.yaml

config:
    name:修改个人信息
    base_url:https://
teststeps:
-
  name:step-login
  testcase:登录用例的性相对路径
-
  name:updata_info
  request:
      method:POST
      headers:
         Authorization:Token $token
      url:api/v1/userinfo
      data:
          username:admin
          password:"123456"
  validate:
  - eq:[status_code,200]
  - eq:[body.code,0]
  - eq:[body.msg,success]

4.参数化和数据驱动

参数化是在parameters关键字
适用场景:搜索功能,步骤相同参数不同

login_case.yaml

config:
    name:登录
    base_url:https://
    variables:
        user:test1
        psw:"123456"
    parameters:
       #user:[test1,test2,test3,test4]   #四个测试用例依次替换user                   
        user-psw:
        -[test1,123456]
        -[test2,123456]
        -[test3,123456]
        -[test4,123456]
    expect:
    -token
    
teststeps:
-
  name:step-login
  request:
      method:POST
      header:
          Content-type:
      url:pai/v1/login
      data:
          username:admin
          password:"123456"
  extract:
       token:body.token
  validate:
  - eq:[status_code,200]
  - eq:[body.code,0]
  - eq:[body.msg,success]

4.参数化引用CSV文件

(1)在yaml/json中直接指定参数列表

该种方式最简单,适合参数列表比较小的情况

(2)通过配置的parameterize函数引用CSV文件

该种方式需要准备csv数据文件,适合数据量比较大的情况

(3)调用debugtalk.py中自定义的函数生成参数列表

该种方式最为灵活,可通过自定义python函数实现任意场景的数据驱动机制,当需要动态生成参数列表时也需要使用该方式

创建user_psw.csv

user,psw
test1,123456
test2,123456
test3,123456

login_case.yaml

config:
    name:登录
    base_url:https://
    variables:
        user:test1
        psw:"123456"
    parameters:  
        user-psw:${P(以项目的根目录查找导文件入)}
    expect:
    -token
    
teststeps:
-
  name:step-login
  request:
      method:POST
      header:
          Content-type:
      url:pai/v1/login
      data:
          username:admin
          password:"123456"
  extract:
       token:body.token
  validate:
  - eq:[status_code,200]
  - eq:[body.code,0]
  - eq:[body.msg,success]

5.参数化引用debugtalk函数

创建debugtalk.py文件在根目录下
def get_user_id():
    return [
    {"user_id":test1}, 
    {"user_id":test2}, 
    {"user_id":test3}
    ]
def get_user_psw(n):
   account=[]
   for i in range(1,n+1):     
       account.append("user":"test"%i,"psw":"123456")
   return acccount
def register_user():   
    user = "test"+str(int(time.time()))
    return user
    
login_case.yaml
config:
    name:登录
    base_url:https://
    variables:
        user:test1
        psw:"123456"
    parameters:  
       # user_id:${get_user_id()}
       user-psw:${def get_user_psw(5)}
    expect:
    -token
    

6.注册案例(随机变量)

Eg:

需求:自动化需要多次反复运行账号注册

问题:注册账号,同一个账号只能注册一次

解决思路:注册账号时添加时间(随机变量)或链接数据库删掉此变量

register.yaml
config:
    name:注册
    base_url:https://
    variables:
        user:%{register_user()}
        psw:"123456"
teststeps:
-

7.hook机制(step和teardown)

setup_hooks:开始执行前触发hook函数,主要用于请求预处理(签名,加密)

teardown_hooks:执行结束后触发hook函数,主要用于返回处理(解密)

在debugtalk.py中写两个函数

def srtup_hook():
    print("srtup_hook")

def teardown_hook():
     print("teardown_hook")

def request_sign(request):#请求预处理,将body中带上签名参数
    body = request.get('req_json')
    sign="sign"
    body["sigin"]=sign
    request[req_json]=body
    
 def response_status(response):#对返回的结果进行处理,将状态码改成203
    response.status_code = 203
    
    
login_case.yaml
config:
    name:登录
    base_url:https://
    variables:
        user:test1
        psw:"123456"
    parameters:  
        user-psw:${P(以项目的根目录查找导文件入)}
    expect:
    -token
    
teststeps:
-
  name:step-login
  request:
      method:POST
      header:
          Content-type:
      url:pai/v1/login
      data:
          username:admin
          password:"123456"
  setup_hooks:
      -${def srtup_hook()}
      -${def request_sign($request)} 
  tear_hooks:
      -${def teardown_hook()}
      -${def response_status($response)} 
  extract:
       token:body.token
  validate:
  - eq:[status_code,200]
  - eq:[body.code,0]
  - eq:[body.msg,success]

8.sign签名案例

9.文件上传

upload关键字上传文件

upfile.yaml
config:
    name:上传文件
    base_url:http://
teststeps:
-
    name:step-上传文件
    request:
        url:/api/v1/upfile/
        method:POST
        upload:
            file:根目录地址
            title:文件

10.测试结果校验数据库状态

Eg:

修改商品信息接口,修改商品状态后,校验数据库对应的goodsstatus状态有没有更新成功

updata_goods_fromsql.yaml

config:
    name:修改商品用例
    base_url:http://
    variables:
        sp_id:1
        goodsname:yoyo
        ...
        merchantid:"1001"
        price:21.0
teststeps:
-
    name:step-修改商品
    request:
        url:/api/v1/goods/
        method:PUT
        json:
            goodname:$goodname
            goodcode:$goodcode
            ...
            price:$price

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值