pytest接口自动化测试
结合单元测试框架pytest+数据驱动模型+allure
目录
api: 存储测试接口
conftest.py :设置前置操作
目前前置操作:1、获取token并传入headers,2、获取命令行参数给到环境变量,指定运行环境
commmon:存储封装的公共方法
connect_mysql.py:连接数据库
http_requests.py: 封装自己的请求方法
logger.py: 封装输出日志文件
read_yaml.py:读取yaml文件测试用例数据
read_save_data.py:读取保存的数据文件
case: 存放所有的测试用例
data:存放测试需要的数据
save_data: 存放接口返回数据、接口下载文件
test_data: 存放测试用例依赖数据
upload_data: 存放上传接口文件
logs: 存放输出的日志文件
report: 存放测试输出报告
getpathinfo.py :封装项目测试路径
pytest.int :配置文件
requirement.txt: 本地python包(pip install -r requirements.txt 安装项目中所有python包)
run_main.py: 项目运行文件
结构设计
1.每一个接口用例组合在一个测试类里面生成一个py文件
2.将每个用例调用的接口封装在一个测试类里面生成一个py文件
3.将测试数据存放在yml文件中通过parametrize进行参数化,实现数据驱动
4.通过allure生成测试报告
代码展示
api/api_service.py #需要测试的一类接口
''' Code description:服务相关接口 Create time: 2020/12/3 Developer: 叶修 ''' import os from common.http_requests import HttpRequests class Api_Auth_Service(object): def __init__(self): self.headers = HttpRequests().headers def api_home_service_list(self): # 首页服务列表 # url = "http://192.168.2.199:9092/v1/auth/auth_service/findAuthService" url = os.environ["host"] + "/v1/auth/auth_service/findAuthService" # 读取conftest.py文件地址进行拼接 response = HttpRequests().get(url, headers=self.headers, verify=False) # print(response.json()) return response def get_service_id(self): #获取银行卡三要素认证服务id url = "http://192.168.2.199:9092/v1/auth/auth_service/findAuthService" #url = os.environ["host"] + "/v1/auth/auth_service/findAuthService" # 读取conftest.py文件地址进行拼接 response = HttpRequests().get(url,headers=self.headers) #print(response.json()['data'][0]['service_list'][0]['id']) service_id = response.json()['data'][0]['service_list'][1]['id'] return service_id def api_service_info(self,serviceId='0b6cf45bec757afa7ee7209d30012ce1',developerId=''): #服务详情 body = { "serviceId" :serviceId, "developerId":developerId } url = "http://192.168.2.199:9092/v1/auth/auth_service/findServiceDetail" #url = os.environ["host"] + "/v1/auth/auth_service/findServiceDetail"#读取conftest.py文件地址进行拼接 response = HttpRequests().get(url,headers=self.headers,params = body,verify=False) #print(response.json()) return response def api_add_or_update_service(self,api_param_req,api_param_res,description,error_code,icon,id,interface_remarks, name,product_info,request_method,sample_code,sort,type,url): #服务添加或者更新 body={ "api_param_req": api_param_req, "api_param_res": api_param_res, "description": description, "error_code": error_code, "icon": icon, "id": id, "interface_remarks": interface_remarks, "name": name, "product_info": product_info, "request_method": request_method, "sample_code": sample_code, "sort": sort, "type": type, "url": url, } #url = "http://192.168.2.199:9092/v1/auth/auth_service/insertOrUpdateService" url = os.environ["host"] + "/v1/auth/auth_service/insertOrUpdateService" # 读取conftest.py文件地址进行拼接 response = HttpRequests().post(url,json=body,headers=self.headers,verify=False) return response def api_add_service_price(self,id,max_number,money,service_id,small_number): #服务价格添加 body = { "id": id, "max_number": max_number, "money": money, "service_id": service_id, "small_number": small_number } # url = "http://192.168.2.199:9092/v1/auth/auth_service/insertServicePrice" url = os.environ["host"] + "/v1/auth/auth_service/insertServicePrice" # 读取conftest.py文件地址进行拼接 response = HttpRequests().post(url, json=body, headers=self.headers, verify=False) return response def api_apply_service(self,developer_id,service_id): #申请服务 body ={ "developer_id": developer_id, "service_id": service_id } # url = "http://192.168.2.199:9092/v1/auth/auth_service/applyService" url = os.environ["host"] + "/v1/auth/auth_service/applyService" # 读取conftest.py文件地址进行拼接 response = HttpRequests().post(url, json=body, headers=self.headers, verify=False) return response if __name__ == '__main__': #Auth_Service().api_home_service_list() Api_Auth_Service().get_service_id() #Auth_Service().api_service_info()