python接口自动化遇到问题总结-持续更新

前提:管理用例用的是excel
1.读取用例时入参带“\n”,原因是有空格会报参数错误
解决:在notePad++里\n和\r都替换下,或者在代码里 case_str=case_str.replace(“\n”, “”).replace(“\r”, “”)
python接口自动化遇到问题总结-持续更新_第1张图片
2.一个sheet管理的案例需要两个不同的token,通用获取token是在conftest.py里,但是B案例需要获取上一条A案例的token
解决:就需要把A的token动态setattr存入类中,然后判断如果有token,则请求时就不用通用token,而是用A的token
if hasattr(Data,“access_token”):
resp = hrq.send_requests(case[“method”], case[“url”], case[“request_data”], token=getattr(Data, “access_token”))
注意:可先用通用token,再用案例中的token,但是最后不能再换成通用token跑案例
3.案例中接口入参需要用到config.ymal
解决:写一个工具类,读取yaml和替换excel入参值为yaml里的数据
入参需要:$ 例如: {“phone”:“$phone”,“x-fr”:“lcs_web”}
注意:yaml里参数命名要遵循一定的规则
4. @pytest.mark.parametrize与python的装饰器同时使用时报错
def api_call(func):
“”"
接口调用记录
:param func: 装饰的函数
:return:
“”"
def inner(*args, **kwargs):
logger.info(f"开始调用接口:{func.name}“)
sleep(1)
res = func(*args, **kwargs)
logger.info(f"结束调用接口:{func.name}”)
return res
return inner
python接口自动化遇到问题总结-持续更新_第2张图片
这样会报“ TypeError: test_contentManagement() missing 2 required positional arguments: ‘case’ and ‘login’”
解决:在装饰器方法上 @six.wraps(func)或@functools.wraps(func)
值得注意的是@functools.wraps(func),这是python提供的装饰器。它能把原函数的元信息拷贝到装饰器里面的 func 函数中。函数的元信息包括docstring、name、参数列表等等。可以尝试去除@functools.wraps(func),你会发现test.__name__的输出变成了wrapper
python接口自动化遇到问题总结-持续更新_第3张图片
链接:https://blog.csdn.net/Warmheart_qian/article/details/118599943
5.读取excel案例时,excel中整个空行有的也被读取了,导致读取执行时多执行了一条案例且这条案例报错
解决:根据行获取列,循环列获取单元格中的值,如果有一个单元格有值,就代表这一行可取,如果有都是空则不可取
def _is_empty_row(self, row):
for cell in row:
if cell.value is not None:
return False
return True
6.迁移python项目导入依赖的包
(1) requirements.txt用来记录项目所有的依赖包和版本号
pip freeze >requirements.txt
(2)一次性安装requirements.txt里面所有的依赖包
pip install -r requirements.txt
python接口自动化遇到问题总结-持续更新_第4张图片
7.接口新增一条数据时,数据库断言查到的数据为空,这时跟数据库的事务有关,这时需要再查询数据库之前提交下事务,如果再不行就要加上第8条

def get_count(self, sql, args=None):
    self.conn.commit() #autocommit=True 类似
    return self.cur.execute(sql, args)

8.接口对数据库进行修改时,插入数据库时是偏慢的,但是代码执行很快,执行数据库断言时,查到的是事务提交之前的,断言会失败,所以就要等业务系统处理完成再去查询,在数据库断言之前加上
#sleep(0.2) # 等待业务系统(被测系统)与数据库交互完成.

你可能感兴趣的:(python,python,自动化,开发语言)