摘要:requests.get(url, params=None, **kwargs)requests.post(url, data=None, json=None, **kwargs)requests.put(url, data=None, **kwargs)re
主要包括:
requests方法请求参数和返回值
提取变量的两种方式:jsonpath和正则表达式
通过文件保存中间变量实现接口串联
数据和业务的分离
requests.get(url, params=None, **kwargs)requests.post(url, data=None, json=None, **kwargs)requests.put(url, data=None, **kwargs)requests.delete(url, **kwargs)上面的四个方法,底层都是调用request方法requests.request(method=method, url=url, **kwargs)request方法需要的传参
method, # 请求的方式 url, # 请求路径 params=None, # get请求传参 json=None, # post请求方式传参 data=None, # post或者put请求传参 headers=None, # 请求头 cookies=None, # cookie files=None, # 文件上传 # 上面常用,下面不常用 auth=None, # 鉴权 timeout=None, # 超时处理 allow_redirects=True,# 是否允许重定向 proxies=None, # 设置代理 hooks=None, # 钩子 stream=None, # 文件下载 verify=None, # 证书验证 cert=None, # CA证书 psot传参用data还是json,取决你传递的参数和类型, json格式用json,其他都用data,文件传参用files返回值的属性:
res = requests.get(url, params=None, **kwargs)print(res.text) # 返回的文本信息print(res.json) # 返回的json格式print(res.content) # 返回的字节内容print(res.status_code) # 返回的状态码print(res.cookies) # 返回的cookieprint(res.encoding) # 返回的编码格式print(res.headers) # 返回的响应头print(res.request) # 返回的请求数据print(res.history) # - 重定向历史记录1、jsonpath表达式:jsonpath.jsonpath(result,"$.access_token")
$ 根节点 . 子节点 .. 递归子节点,取全部符合要求的值 代表列表中的值,下标从0开始使用方式:jsonpath.jsonpath(obj, expr)示例:vaules = jsonpath.jsonpath(result,"$.access_token")test_get_token = vaules[0]result为接口响应的结果,"$.access_token"为JSONpath表达式,获取key=access_token的值[0]为下标点,从0开始,0为的第一个获取的值2、正则表达式提取
re.search(pattern, string, flags=0) 提取一个值,通过下标取值re.findall 提取多个值,通过下标取值使用方式:carf_token = re.search("dhuaidjiosavalues='(.*?)'", result)"dhuaidjiosavalues='(.*?)'" 为正则表达式result为接口响应的结果。正则表达式是捕获结果里面的内容。创建extract.yaml文件保存变量(用于参数化关联)
1、优点:跨py文件使用,统一管理中间变量2、创建commons目录下创建一个yaml_util.py文件,根目录下创建一个extract.yaml文件。(yaml都会有键值对,可以跟字典、列表转换)3、yaml_util.py文件中写入三种方法: 1、把变量写入到yaml文件 2、把yaml中的变量拿出去使用 3、清除多余数据提取变量引用变量:
接口返回的变量通过yaml_util.py文件的write_yaml方法写入extract.yaml文件中。
使用yaml_util.py文件的wread_yaml方法调用extract.yaml文件中的变量。
清空extract.yaml文件中多余的数据,conftest.py文件中固件调用yaml_util.py文件的clear_yaml方法
数据和业务耦合在一起的话,不利于我们去做数据驱动,如果我们的用例过多,一条一条复制粘贴的话一会就变成了豆腐脑。所以需要我们把数据保存到Excel、csv、yaml、txt里面。
excel:有很多数据类型问题、接口关联性问题
yaml:知名的框架基本都用yaml文件保存数据
yaml数据读取到用例里面:
第一步:用例添加装饰器@pytest.mark.parametrzie(casedata,read_testcase("./testcase/test_get_token.yaml"))。
casedata为变量,储存yaml用例中的数据。
read_testcase("./testcase/test_get_token.yaml"))为yaml_util.py文件中的读取数据的方法,此刻提取的是test_get_token.yaml中的列表。
第二步:把储存数据的变量casedata,传到用例当中,def test_get_token(self,casedata)。
第三步:把接口所有的参数都换成test_get_token,yaml中列表的key。
第四步:目前已经实现了简单的数据驱动测试,数据和业务分离。
yaml数据读取到用例里面,处理接口关联:
第一步:test_select_flag,yaml文件中params参数中是一个常量,所以需要动态获取正确的access_token值返回给datas。
第二步:使用for循环key、values,在datas中。
第三步:使用read_yaml(key)方法,(其中key=数据驱动文件中的access_token),所以相当于read_yaml(access_token),而read_yaml(access_token)方法可以获取到extract.yaml文件中access_token值,最后传给datas[key]。
第四步:最后datas直接传给request请求中的params就可以了。
yaml数据读取到用例里面,处理文件上传
第一步:params参数常量跟上一个请求循环的方式一样。
第二步:file文件上传也需要使用for循环来上传文件路径。
第三步:使用open(values,"rb")方式获取到数据驱动文件的值,传给files[key]。
第四步:最后params=datas,files= files。
版权声明:本文为CSDN博主「小凯12345」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
来源:互联网AI工程师
