本人对Python一直处在入门阶段,简单的方法能写出来,复杂的就不行了,现在想做一个接口自动化,单个用例已经能够写出来,但是考虑到之后的流程性测试,就必须要攻破参数化传递这一关,因为之前都没怎么写过,所以脑子里面没什么方案。
举例:如图,一个登陆的测试用例,登陆成功后,后面的接口需要传入该用户的sessionid作为参数,我自己写了个提取器,能够把返回的response中的sessionid提取出来,但是在后面的用例中不知道怎么调用;还有就是,比如第一次需要用sessionid作为下一个接口的入参,第二次却需要response中的userid作为入参,那这种情况该如何实现呢?最好能说详细一点,加一些封装思路就更好了,谢谢大家~
最后在阐述一下我的想法:需要获取上一个接口的response中的某个字段的值,并能够作为下一个接口的参数,如果能封装成方法就更好了。我现在有两个想法,第一个是每次setup方法请求前一个接口,获取对应的值。第二个是每一个请求的返回数据我都存到一个json文件里面,在写用例的时候再去解析json文件中对应的数据作为参数,不知道这两种方法那种方法可行性更高,或者有没有更好更简单的方法和思路,本人小白一个,如果用第二种方法的话,可能在能力上还需要进一步提高,但是第一种方法又感觉太冗余了,毕竟每次需要传递参数时,都需要在setup里面请求一下之前的接口,并单独提取某个值作为参数
----------------------------------------------------------------------------------------------------------------
昨晚研究了一下,用了setup试了一下,但是发现有如下几个问题:
1.调用后,控制台报一个不知道是啥的错误,见后面的报错
2.因为我调用的sessionid参数是需要在第二个接口作为参数传进去的,但是这样的话,原有的参数是不是就不能传了,我们公司的接口都有公共参数,也就是代码中的params=self.QUERY,但是我传了公共参数后,又需要继续传sessionid,也就是代码中的self.j_1,这种情况该怎么办呢?
代码和报错如下:
class TestXjxHTTP(unittest.TestCase):
URL = Config().get('URL')
logger.info('请求的URL为:{0}'.format(URL))
LOGIN_URL = Config().get('login_url')
INDEX_URL = Config().get('index_url')
RISK_URL = Config().get('risk_url')
QUERY = Config().get('PARAMS')
LOGIN = URL + LOGIN_URL
INDEX = URL + INDEX_URL
RISK = URL + RISK_URL
def setUp(self):
self.j = JMESPathExtractor()
self.client = HTTPClient(url=self.LOGIN, method='POST')
logger.info('请求的api路径为:{0}'.format(self.LOGIN_URL))
logger.info('拼接后的请求路径为:{0}'.format(self.LOGIN))
res = self.client.send(data=self.QUERY)
logger.info('接口入参为:{0}'.format(self.QUERY))
# self.assertIn('登录成功', res.text)
self.j_1 = self.j.extract(query='data.item.sessionid', body=res.text)
logger.debug('该用户的sessionid为:{0}'.format(self.j_1))
print('该用户的sessionid为:{0}'.format(self.j_1))
return self.j_1
def test_xjx_http_risk1(self):
self.client = HTTPClient(url=self.INDEX, method='GET')
logger.info('请求的api路径为:{0}'.format(self.RISK_URL))
logger.info('拼接后的请求路径为:{0}'.format(self.RISK))
res = self.client.send(params=self.QUERY, data=self.j_1)
logger.info('返回的参数为:{0}'.format(res.text))
logger.info('接口入参为:query--{0}\ndata--{1}'.format(self.QUERY, self.j_1))
if __name__ == '__main__':
unittest.main()
执行以上代码会报错,报错如下:
"D:\Program Files\python3\python.exe" C:/Users/Administrator/PycharmProjects/PythonApitest/testCase/case1.py
该用户的sessionid为:FE2C7DF176A44E4A91FF687135A13641
C:/Users/Administrator/PycharmProjects/PythonApitest/testCase/case1.py:87: ResourceWarning: unclosed
self.client = HTTPClient(url=self.INDEX, method='GET')
.D:\Program Files\python3\lib\unittest\suite.py:84: ResourceWarning: unclosed
return self.run(*args, **kwds)
----------------------------------------------------------------------
Ran 1 test in 0.607s
OK
Process finished with exit code 0