接口测试中,如何优雅的解决用例之间参数调用?

在这里插入图片描述
近期一个接口测试实战小问题引起了众多测试同窗的关注,本文整理了学员疑惑之处和学院老师的解答,供你们一块儿学习参考。
json

Question by @Vantasapi

在接口测试过程当中,我遇到一个问题:数据结构

如何将上一用例的返回值的某个 keyvalue 值,看成下一用例的入参进行使用呢?

例如第一个用例是登陆,后续每个接口都须要用到登陆接口返回的 token,用什么方式去传这个 token 呢?若是后面接口须要多个入参呢(即须要登陆的 token,也须要另外一个接口的 id 值)?多线程

Answer by @Wayyt架构

要看使用的是什么工具。若是是用 Java/Python 代码,那返回值转成 JSON,而后提取出来就能够了。

Question by @Vantasapp

我使用的是 Pytest,把返回值赋给了一个全局变量的字典,后面用例直接调用字典,这样能够吗?

用 JSON 或字典返回,再后面用例怎么传入呢,一直没弄清楚,是用fixtrue调用方法名,而后用例里直接写返回的变量名吗?工具

那像第三个支付用例,里面须要 token,还须要 URL 后面加 “orderids”,这种须要前面两个用例得返回值,怎么写呢?不能方法名中传入两个 fixtrue 把?那若是须要多个参数呢?若是用例很是多的话,用例之间参数调用关联比较多,怎么样维护比较好呢?post

有没有最优方式?如下是示例代码:学习

def setup():
self.t=globals()

#登录
def test_fxLogin(self):
    url =http://www.xxx.com/tokendata = { username:hffx,password:123456,platformType:NORMAL}
    headers = { Content-Type:application/json}
    r = requests.post(url, data=json.dumps(data), headers=headers)
    result = r.text
    print(result)
jsr = json.loads(result)
fxtoken = jsr[data]
self.t[fx]=fxtoken
assert r.status_code==200

#下单
def test_buyprocedure(self):
    url =http://www.xxx.com/data = { data}]}
    headers = { Authorization:self.t[fx],Content-Type:application/json}
    r=requests.post(url,data=json.dumps(data),headers=headers)
    result = r.text
    print(result)
jsr=json.loads(result)
orderid=jsr[data][id]
self.t[orderids]=orderid
assert r.status_code == 200

#支付
def test_payprocedure(self):
    url =http://www.xxx.com/+self.t[orderids]
    data = { "data}]}
    headers = { Authorization:self.t[fx],Content-Type:application/json}
    r=requests.post(url,data,headers)
    print(r.text)
assert r.status_code==200

Answer by @Wayyt测试

其实这个逻辑很是简单,你不要把它想复杂。无非就是作三件事:拿到 token,存储 token,调用token

从返回值中提取便可,用一个列表、一个字典甚至一个文件,把它存储起来。读取你放置token的数据结构或者文件便可。

// 能够用setup_class

@classmethod
def setup_class(cls):
    cls.pass_dic = { }

// 以后在测试用例里用self.pass_dic来存取结果

Answer by @思寒

  • 全局变量能够,可是不推荐
  • 类变量能够 cls.xx,多线程容易出问题
  • 实例变量 self.xx,这种方式最好

如下是一个没有使用 Page/API Object 模式的入门用例:

class TestWework:
    def setup_class(self):
        r = requests.get(
            'https://qyapi.weixin.qq.com/cgi-bin/gettoken',
            params={ 
                'corpid': 'xxxxx',
                'corpsecret': 'xxxxxxxx'
            }
        )
        self.token = r.json()['access_token']

    def test_tags_list(self):
        r = requests.post(
            'https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get_corp_tag_list',
            params={ 'access_token': self.token}
        )
        print(json.dumps(r.json(), indent=2, ensure_ascii=False))
        assert r.status_code == 200
        assert r.json()['errcode'] == 0

在这里插入图片描述

另外,欢迎加入软件测试技术交流群 313782132 ~进群可领取软件测试资料以及群内测试大牛解惑!

测试工程师职业发展路线图

功能测试 —— 接口测试 —— 自动化测试 —— 测试开发 —— 测试架构师

加油吧,测试人!若是你须要提高规划,那就行动吧,在路上总比在起点观望的要好。事必有法,而后有成。

资源不错就给个推荐吧~

相关文章
相关标签/搜索