pytest+python+requests+allure接口自动化
文件层级:
接口层,用例层,公共层,报告层,conftest.py
注意:1.需要被调用的类方法,使用@classmethod,这样调用时,无需实例化;
2.保持登录,使用requests.session;
方式一:
conftest.py:1.登录:fixture(scope=session)写登录方法;2.参数关联:定义空字典,使用fixture(scope=function),闭包方式写提取参数,读取参数;
接口层:类、类属性(url,method);
用例层:导入接口层的类,测试用例方法中调用 方法中传登录方法名,接口地址(类.url);
方式二:
项目根目录添加到系统路径下,代码放在run.py 或者conftest.py;
base_requests.py:封装执行方法;如,#base/base_requests.py
接口层:继承base_requests; 1.写测试用例(如,登录方法);如,#api_object/api_login.py
用例层:导入接口类,执行;如,#test_case/test_userinfo.py
公共层:读等;如,#common/Read.py
域名:接口层创建工具包,新增读.py,调用公共方法的读,并返回域名;如,#api_object/utils/read_domain.py
confest.py:1.自动调用执行方法;如,#conftest.py
# 获取项目根目录的绝对路径 r_dir = os.path.dirname(os.path.realpath(__file__)) #将项目根目录加入系统路径 sys.path.insert(0,r_dir) #下面可以导入根目录下的模块或包,而不会出现导入错误 # pytest.main(['-vs']) # 运行测试并生成Allure报告的命令行参数
#base/base_requests.py import requests class BaseCaseExecute: method="" url = "" @classmethod def execute(self,**kwargs): rs = requests.session() response=rs.request(self.method,self.url,**kwargs) return response
#api_object/api_login.py from base.base_requests import BaseCaseExecute from api_object.utils.read_domain import Read_domain class Test_api_login(BaseCaseExecute): method="post" url = Read_domain.read_domain("login") + "/signin" # 读取域名+填写接口地址
#test_case/test_userinfo.py from api_object.userinfo import userinfo import allure class Test_userinfo: @allure.title("博客园列表1") #用例的标题写在每条用例的上一行 def test_userinfo(self): result=userinfo.execute() print(result.text) assert "星空" in result.text
#common/Read.py import yaml from configparser import ConfigParser class Read: @classmethod def Read_yaml(self,file_path): #读取yaml文件 with open(file_path,"r") as f: data=yaml.safe_load(f) return data @classmethod def Read_ini(cls,file_path,title,name):#读取ini文件 config=ConfigParser() #初始化解析器 config.read(file_path) print("读取的ini文件路径:{}".format(file_path)) value=config.get(title,name) #读取配置文件中的值,如域名 return value
#api_object/utils/read_domain.py from common.Read import Read class Read_domain: @classmethod def read_domain(cls,name): value=Read.Read_ini("config/config.ini", "host", name) return value #返回对应域名
#conftest.py import pytest #导入读 from common.Read import Read from api_object.api_login import Test_api_login headers=Read.Read_yaml("config/config.yaml").get("request_headers") @pytest.fixture(autouse=True,scope="session") #自动执行,测试用例中无需调用 def login(): rs=Test_api_login.execute() rs.headers.update(headers)
越努力,越幸运!!!
good good study,day day up!!!