文件层级:
接口层,用例层,公共层,报告层,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)