def test_login(self, case): # 拼接url地址 url = conf.get("env", "url") + case.url # 行数等于用例编号+1 self.row = case.case_id + 1 # 向接口发送请求 response = self.request.request(method=case.method, url=url, data=eval(case.request_data)) time.sleep(2) # 该打印的内容会显示在报告中 print("") print("请求地址--> {}".format(url)) print("请求参数--> {}".format(case.request_data)) print("期望结果--> {}".format(case.expected_data)) print("服务器响应数据--> {}".format(response.json())) res = response.json() if "登录成功" in str(res): res = { 'data': { 'id': res['data']['id'], 'rid': res['data']['rid'], 'username': res['data']['username'], 'mobile': res['data']['mobile'], 'email': res['data']['email'] }, 'meta': res['meta'] } output_log.info('处理后的服务器返回数据 --> {}'.format(res)) try: self.assertEqual(eval(case.expected_data), res) except AssertionError as e: result = 'FAIL' output_log.exception(e) # 将异常信息记录到日志 raise e else: result = 'PASS' output_log.info("预期结果:{}, 实际结果:{}, 断言结果:{}".format( case.expected_data, res, result)) finally: # 向Excel回写服务器返回结果 self.wb.write_data(row=self.row, column=9, value=str(response.json())) # 向Excel回写断言结果 self.wb.write_data(row=self.row, column=10, value=result)
def request(self, method, url, params=None, data=None, headers=None, cookies=None, json=None): method = method.lower() if method == "post": # 判断是否使用json来传参(适用于接口项目有使用json传参) if json: output_log.info("正在发送请求,请求地址:{}, 请求参数:{}".format(url, json)) return self.session.post(url=url, json=json, headers=headers, cookies=cookies) else: output_log.info("正在发送请求,请求地址:{}, 请求参数:{}".format(url, data)) return self.session.post(url=url, data=data, headers=headers, cookies=cookies) elif method == "get": output_log.info("正在发送请求,请求地址:{}, 请求参数:{}".format(url, params)) return self.session.get(url=url, params=params, headers=headers, cookies=cookies) elif method == 'put': output_log.info("正在发送请求,请求地址:{}, 请求参数:{}".format(url, data)) return self.session.put(url=url, data=data, headers=headers, cookies=cookies) elif method == 'delete': output_log.info("正在发送请求,请求地址:{}, 请求参数:{}".format(url, data)) return self.session.delete(url=url, headers=headers, cookies=cookies)
def tearDownClass(cls) -> None: output_log.info("============================== 修改用户状态接口测试执行完毕 ==============================") cls.request.close()
def setUpClass(cls) -> None: output_log.info("============================== 开始执行修改用户状态接口测试 ==============================") cls.request = HTTPRequest()
def test_add_user(self, case): # 拼接url地址 url = conf.get("env", "url") + case.url # 行数等于用例编号+1 self.row = case.case_id + 1 # 获取token token = get_token(eval(case.token_data)) # 拼接headers headers = {'Authorization': token} # 由于是注册接口 注册使用的用户名每次需要更改 所以使用参数化 使用随机名称来替换 username = rand_name() case.request_data = case.request_data.replace('#username', username) # 向接口发送请求 response = self.request.request(method=case.method, url=url, headers=headers, data=eval(case.request_data)) time.sleep(2) # 该打印的内容会显示在报告中 print("") print("请求地址--> {}".format(url)) print("请求参数--> {}".format(case.request_data)) print("期望的返回结果--> {}".format(case.expected_data)) print("服务器响应数据--> {}".format(response.json())) res = response.json() if '创建成功' in str(res): sql = 'SELECT mg_id, role_id, mg_time FROM sp_manager WHERE mg_name="{}"'.format( username) mg_id, role_id, create_time = self.db.find_one(sql=sql) expected_data = { 'data': { 'id': mg_id, 'username': username, 'role_id': role_id, 'create_time': create_time }, 'meta': { 'msg': '创建成功', 'status': 201 } } try: self.assertEqual(expected_data, res) except AssertionError as e: result = 'FAIL' output_log.exception(e) # 将异常信息记录到日志 raise e else: result = 'PASS' output_log.info("预期结果:{}, 实际结果:{}, 断言结果:{}".format( expected_data, res, result)) finally: # 向Excel回写服务器返回结果 self.wb.write_data(row=self.row, column=10, value=str(response.json())) # 向Excel回写断言结果 self.wb.write_data(row=self.row, column=11, value=result) # 由于excel用例的期望结果 也采用了参数化 为了直观查看 在测试完成后 将期望结果的具体值回写到excel self.wb.write_data(row=self.row, column=9, value=str(expected_data))
def setUpClass(cls) -> None: output_log.info( "============================== 开始执行新增用户接口测试 ==============================" ) cls.request = HTTPRequest() cls.db = ExecuteMysql()
def test_login(self, case): output_log.info('正在执行登录测试')
def tearDown(self) -> None: output_log.info('该条用例执行完成')
def setUp(self): output_log.info('开始测试本条用例')