测试人社区

接口测试,如何将上一用例的返回值当作下一用例的入参进行使用

如何将上一用例的返回值的某个key的value值 当作下一用例的入参进行使用呢?
例如第一个用例是登录,后续每一个接口都需要用到登录接口返回的token,什么方式去传这个token呢?
如果后面接口需要多个入参呢(即需要登录的token,也需要另一个接口的id值)?
有哪些比较好的方法,可以提供下,谢谢

要看你使用的是什么工具。 如果是用的代码java/python,返回值给它转成json然后提取出来就可以了

老师,这两天pytest课程,我用得pytest,我大概写了个例子,我这样是把返回值赋给了一个全局变量得字典,后面用例直接调用字典,这样可以吗?
老师你说得把 json或字典返回出来,再后面用例怎么传入呢,一直没弄清楚,是用fixtrue调用方法名,然后用例里直接写
返回得变量名吗?那像第三个支付用例,里面需要token,还需要url后面加“orderids”,这种需要前面两个用例得返回值,怎么写呢
不能方法名中传入两个fixtrue把?那如果需要多个参数呢?有没有最优得方式,可以举个例子吗?谢谢老师
如果用例非常多的话,用例之间参数调用关联比较多,怎么样维护比较好呢?

eg:加粗得字体是传入得参数

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’]=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

@Wayyt @Pegasus-Yang 老师可以帮忙解答一下吗

你可以用setup_class

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

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

代码需要格式化一下… 没格式化的代码可读性太差了。
其实这个逻辑非常简单,你不要把它想复杂
无非就是做三件事,1. 拿到token, 2. 存储token 3. 调用token

  1. 已经说过了,从返回值中提取即可
  2. 就是这位助教说的,用一个列表、一个字典甚至一个文件,把它存储起来。
  3. 就是读取你放置token的数据结构或者文件即可。

好的,了解了,感谢老师

好的,了解了,代码编辑器写好粘进来的,没格式化了,下次注意,感谢老师

markdown格式了解一下 ~

ok,下回注意

测试开发技术实战进阶最佳实践

推荐学习霍格沃兹测试学院出品 《测试开发实战进阶》课程,BAT 大厂前沿实践,开源项目作者亲授 。4 个月 20+ 项目实战强化训练,测试大咖思寒授之以渔,一站式掌握 BAT 测试开发工程师必备核心技能( 对标阿里P6+,年薪50W+ )!学员 直推 BAT 名企测试经理 ,普遍涨薪 50%+!

Python 测试开发实战进阶课程_.pic_hd

霍格沃兹测试学院简介

霍格沃兹测试学院(ceshiren.com)作为中国领先的软件测试技术高端教育品牌,始终致力于为 IT 行业提供最优秀的测试开发技术培训和人才内推服务。我们的愿景是成为测试开发工程师的黄埔军校。

霍格沃兹测试学院课程体系和大纲均根据互联网大厂的最新、最先进的测试开发技术栈设计,突出「高品质、进阶式、实战为主」课程特色,并由来自 BAT、TMD 一线名企的测试大咖、资深测试架构师、测试经理或高工精心打磨和传授,涵盖当下最热门的移动自动化测试技术、Web 自动化测试技术、接口自动化测试、性能测试、安全测试、移动专项测试、持续集成与 DevOps、代码审计与分析、质量监控体系建设等内容,代表了测试行业技术培训顶级水平。

霍格沃兹测试学院已经影响和帮助了数万测试工程师的成长,并与 100+ 互联网名企建立人才内推和技术培训合作关系,学院也凭借过硬的课程质量、超强服务实力和超高好评率成为腾讯课堂「官方认证教育机构」并被颁发「最受欢迎奖」(测试类目唯一获此殊荣机构)。

测试开发精品课程推荐(支持免费试听)

有以下几种方式,一是作为全局变量,可以写在base中,二是用setup

  • 全局变量可以,但是不推荐
  • 类变量可以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