# apiDemo **Repository Path**: wangyix/api-test ## Basic Information - **Project Name**: apiDemo - **Description**: Pytest+allure的接口自动化 1. 简化接口用例的编写方式 2. 使用关键字,自定义断言,域名切换等功能 3. 可以作为新手第一个的接口自动化“框架”练手 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 1 - **Created**: 2021-06-05 - **Last Updated**: 2022-05-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 编写用例的方式如下 ![](https://imgfigure1.oss-cn-hangzhou.aliyuncs.com/20210605134024.png) # 1. 简介 ![](https://imgfigure1.oss-cn-hangzhou.aliyuncs.com/20210605133207.png) - case目录下存放用例,一般情况按照模块来划分,如果是拆分了服务的话,也可以按照服务来划分 ![](https://imgfigure1.oss-cn-hangzhou.aliyuncs.com/20210605133919.png) - user模块 - user_api_case.xls 测试用例 - ![](https://imgfigure1.oss-cn-hangzhou.aliyuncs.com/20210605134024.png) - user_api_data.json 接口模板 - ![](https://imgfigure1.oss-cn-hangzhou.aliyuncs.com/20210605134231.png) - user_basics_test.py 用例执行方式 区分用例阶段:冒烟用例和测试用例等 ``` ##冒烟测试 @pytest.mark.smoke @pytest.mark.parametrize("params", CASE_DATA[0]) # api_name,case_title,api,method,head,data,case_expect @allure.feature("用户管理") def test_user_smoke(params, login): # 报告 api_name = params[0] # 接口名字 case_doc = params[1] # 接口的描述信息 allure.dynamic.story(api_name) # 向报告描述中添加接口名字 allure.dynamic.description(case_doc) # 向报告中的case添加描述 # api信息 api = params[2] # api method = params[3] # 请求方法,post等 head = params[4] # head,空或者是token data = json.dumps(params[5]) # 请求数据,dict转json case_expect = params[6] # 预期结果,dict url = HOST + api if head == "token": head = header(login) else: head = header() log.info("正在执行{}的{}用例".format(api_name, case_doc)) with allure.step("第一步,发送请求,请求数据是:\n{}".format(data)): res = GetMethod().run_method(method=method, url=url, header=head, data=data) with allure.step("第二步,获取响应,响应结果是:\n{}".format(res)): Assertions().run(res, case_expect) @pytest.mark.test @pytest.mark.parametrize("params", CASE_DATA[1]) # api_name,case_title,api,method,head,data,case_expect @allure.feature("用户管理") def test_user_test(params, login): # 报告 api_name = params[0] # 接口名字 case_doc = params[1] # 接口的描述信息 allure.dynamic.story(api_name) # 向报告描述中添加接口名字 allure.dynamic.description(case_doc) # 向报告中的case添加描述 # api信息 api = params[2] # api method = params[3] # 请求方法,post等 head = params[4] # head,空或者是token data = json.dumps(params[5]) # 请求数据,dict转json case_expect = params[6] # 预期结果,dict url = HOST + api if head == "token": head = header(login) else: head = header() log.info("正在执行{}的{}用例".format(api_name, case_doc)) with allure.step("第一步,发送请求,请求数据是:\n{}".format(data)): res = GetMethod().run_method(method=method, url=url, header=head, data=data) with allure.step("第二步,获取响应,响应结果是:\n{}".format(res)): Assertions().run(res, case_expect) if __name__ == '__main__': test_user_smoke() ``` # 2. 启动 ## 2.1 Python版本 Python3.8.5 ## 2.2 下载依赖 自行在在本地安装Allue工具 Python下载的allure库是负责插入allure报告里的内容 本地的allure工具把运行完的xml数据 转化为HTML报告 ``` #在ApiDemo项目的目录下运行 pip install -r requirements.txt ``` ## 2.3 启动mockServer 在mockServer目录下 ``` java -jar moco-runner-1.1.0-standalone.jar start -p 8080 -c 6.5apiMock.json ``` ![](https://imgfigure1.oss-cn-hangzhou.aliyuncs.com/fb7e51ef9039b3d12ffdf618df5bd03.png) ## 2.5 运行run.py ![](https://imgfigure1.oss-cn-hangzhou.aliyuncs.com/20210605135043.png) ## 2.6 查看报告 点击html文件 ![](https://imgfigure1.oss-cn-hangzhou.aliyuncs.com/20210605135522.png) 查看报告 ![](https://imgfigure1.oss-cn-hangzhou.aliyuncs.com/20210605135439.png)