写点什么

软件测试 / 测试开发丨接口测试用例之间参数调用

作者:测试人
  • 2023-04-16
    北京
  • 本文字数:1634 字

    阅读完需:约 5 分钟

获取更多相关知识


近期一个接口测试实战小问题引发了众多测试同学的关注,本文整理了学员疑惑之处和学院老师的解答,供大家一起学习参考。


Question by @Vantas

在接口测试过程中,我遇到一个问题:

如何将上一用例的返回值的某个 key 的 value 值,当作下一用例的入参进行使用呢?

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


Answer by @Wayyt

要看使用的是什么工具。如果是用 Java/Python 代码,那返回值转成 JSON,然后提取出来就可以了。


Question by @Vantas

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

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

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

有没有最优方式?以下是示例代码:

def setup():self.t=globals()
#登陆def test_fxLogin(self): url = “http://www.xxx.com/token” data = {“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’]=fxtokenassert 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’]=orderidassert 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
@classmethoddef 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
复制代码


发布于: 刚刚阅读数: 4
用户头像

测试人

关注

专注于软件测试开发 2022-08-29 加入

霍格沃兹测试开发学社,测试人社区:https://ceshiren.com/t/topic/22284

评论

发布
暂无评论
软件测试/测试开发丨接口测试用例之间参数调用_软件测试_测试人_InfoQ写作社区