好久不见!!好久都没有更新了(太懒啦)
正题:我在学习的自动化测试的路上慢慢的接触了”自动化测试框架”的概念,本质上就是封装的思想,是一系列思想的集合,是将各种自动化测试框架思想集合应用去搭建成的一个分层组织。我们可以先从简单的部分入手,,今天就给大家分享一个我个人认为好理解好掌握的利用yaml文件对接口关联做一个封装。
一、思路分析
我们知道一般在接口测试中,有很多的接口都是有关联性的,这其中呢也会有很多中间变量的产生,比如我要获取到一个接口的信息他是需要token值的,换句话说就是要先获取到token值,那我们总不能每个接口都要获取一遍吧,这样会造成多次请求浪费资源。
所有我们的目的就是利用yaml文件,把我们所需要的中间值传入公共yaml文件中,这样会方便读取,然后每个接口所需要的信息也可以存放在它自己独有的yaml文件中。
二、公共方法的封装
1.首先我们新建一个commons包
request_util.py:统一的请求封装
这个思路很简单就不多说了,下面贴上代码!
import requests
'''
请求封装
'''
class RequestUtil:
sess = requests.session() # 初始化一个session对象
def all_send_request(self,method,url,**kwargs):
print("----------接口开始------------")
res = RequestUtil.sess.request(method,url,**kwargs)
print(res.text)
return res
2.基于yaml的读取、写入、清空对接口测试用例进行同一封装
import os
import yaml
class YamlUtil:
# 获取当前文件的目录
cur_path = os.path.abspath(os.path.dirname(__file__))
print(cur_path)
# 获取根目录
root_path = cur_path[:cur_path.find("Project\\") + len("Project\\")]
print(root_path)
# 读取
def read_yaml(self, key):
with open(YamlUtil.root_path + "/extract.yaml", encoding="utf-8") as f:
value = yaml.load(stream=f, Loader=yaml.FullLoader)
return value[key]
# 写入
def write_yaml(self, data):
with open(YamlUtil.root_path + "/extract.yaml", encoding="utf-8", mode="a") as f:
yaml.dump(data, stream=f, allow_unicode=True)
# 清空
def clean_yaml(self):
with open(YamlUtil.root_path + "/extract.yaml", encoding="utf-8", mode="w") as f:
f.truncate()
# 读
def read_test_yaml(self, yaml_path):
with open(YamlUtil.root_path + yaml_path, encoding="utf-8") as f:
value = yaml.load(stream=f, Loader=yaml.FullLoader)
return value
读取和写入没什么好说的,在根目录下新建extract.yaml。清空呢就是在每次请求之前要把存放变量的yaml文件进行清空,防止它有多余的变量,影响读取值。既然说到这里就还需要一个在每次请求之前调用的一个方法。
import pytest
from commons.yaml_util import YamlUtil
# scope='session'表示在整个执行的过程当中只会执行一次
@pytest.fixture(scope='session', autouse=True)
def execute_sql():
YamlUtil().clean_yaml() # 请求之前清空
三、请求信息的封装
做过接口测试都知道,我们在请求的时候大部分都要携带一些参数信息,通过接口文档或者是自己抓包都可以得到相关信息头。那其实这些参数也是可以通过yaml文件进行存储的。下面举个例子。
这是一条获取token的接口,所需要的信息看下面yaml文件(yaml文件有自己的读写模式,这个大家可以去百度一下)
import pytest
from commons.request_util import RequestUtil
from commons.yaml_util import YamlUtil
class Test:
# 获取token接口
@pytest.mark.parametrize("par", YamlUtil().read_test_yaml("/testcase_interface/get_login_token.yaml"))
def test_get_login_token(self, par):
url = par["request"]["url"]
method = par["request"]["method"]
data = par["request"]["data"]
headers = par["request"]["headers"]
res = RequestUtil().all_send_request(method=method, url=url, json=data, headers=headers)
result = res.json()
result_data = (result['data'])
print(result_data['token'])
dic = {"X-Litemall-Token": result_data['token']}
YamlUtil().write_yaml(dic)
-
title: 调用登录接口获取token
request:
method: post
url: https://litemall.hogwarts.ceshiren.com/wx/auth/login
data:
username: qwer
password: 1234
headers:
content-type: application/json;charset=UTF-8
validate: null
可以看到的是这条接口利用这个pytest框架和上面我们写到的公共读取方法,读取到了属于它自己的yaml文件(建议yaml名字和接口请求方法名字可以起一样的,并且我们读取到的token值也存放到了extract.yaml中了。
想读取token这样就可以
"X-Litemall-Token": YamlUtil().read_yaml("X-Litemall-Token")
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/114915.html