动态创建一个函数(带有参数变量)
python中动态创建函数。有以下几种方案可以进行动态创建:
- 可以使用闭包
- lambda表达式
- 可以使用
types
模块中的FunctionType
其中第三种比较复杂。
在进行接口自动化测试框架的搭建过程中,需要将测试用例数据传入一个名称以test_
开头的方法模板中,然后将该方法模板通过反射注入到测试模块当中。当运行pytest
时就可以执行该方法。
此前已经通过模拟闭包解决了方法模板中未正确引用测试数据的问题,但是仍有一个问题,那就是目前定义的方法模板中无法加入参数(测试数据参数是在函数内调用的,此处指的是无法在函数上进行传参)。
如果能够实现在函数上传参,就可以在conftest.py
文件中定义fixture
,然后将该fixture
在方法模板的函数上作为参数名称进行引用,达到使用fixture
的目的。
以下代码的原理参考:https://zhuanlan.zhihu.com/p/386276353
1 | # conftest.py |
yaml数据如下
1 | config: |
运行后结果如下:
1 | data/mall/login.yaml::test_login1 --------------request------ |
在yaml文件的config下定义了fixture,然后在conftest.py文件中写了对应的两个fixture,运行后控制台打印输入了fixture中的内容,说明调用fixture成功了。将打印测试数据换成对测试数据进行前置处理、发送请求、后置处理、断言等逻辑代码,即可执行接口自动化测试。