其他测试框架 UI 自动化,能否利用 fixture 只登录一次,执行完所有用例后,再退出

王波 · 2022年08月30日 · 最后由 咖啡咖 回复于 2022年09月01日 · 8284 次阅读

最佳回复

unittest 可以写一个单例维护 driver, 例如用类变量, case 里面用这个单例返回的 driver, 用 atexit 注册一个 driver 的退出函数, 可以实现

或者单例维护的是 cookie/session 之类的校验值, 初始化时取出来存到类变量 (或外部存储,例如 redis/mysql) 后 driver 立即销毁, 这样 case 执行完就不用处理这个 driver 销毁

或者再极端点, 写一个小 service 来做处理获取及校验 cookie/session 的事, case 去这个 service 拿, 也可

共收到 14 条回复 时间 点赞

unittest 好像没有,用 pytest 可以的,pytest 兼容 unittest,在 contest 文件写 fixture 吧

用 fixture 可以,也可以用 setup_module/teardown_module

Andy 回复

谢谢,暂不考虑 pytest 😂

王波 #10 · 2022年08月30日 Author
木子健 回复

谢谢,暂不考虑 pytest 😂

lazyBoy 回复

unittest 的 setUpModule tearDownModule 是模块级别的,我希望执行所有模块前登录,执行后,再退出 😂

pytest 才是正解, 早晚都要用的

unittest 可以写一个单例维护 driver, 例如用类变量, case 里面用这个单例返回的 driver, 用 atexit 注册一个 driver 的退出函数, 可以实现

或者单例维护的是 cookie/session 之类的校验值, 初始化时取出来存到类变量 (或外部存储,例如 redis/mysql) 后 driver 立即销毁, 这样 case 执行完就不用处理这个 driver 销毁

或者再极端点, 写一个小 service 来做处理获取及校验 cookie/session 的事, case 去这个 service 拿, 也可

感觉楼主有点矛盾啊,标题是想用 fixture,但是又不考虑 pytest, 所以是 unittest 里面可以支持 fixture 吗?

其实 unittest 转化成 pytest 还是很快的,不知道楼主是基于什么原因,一点都不考虑 pytest 呢?

楼主用 的是 unittest 吗?可以仿写一个类似 pytest 的 fixture。

王波 #12 · 2022年08月31日 Author

统一回复下,组内使用 unittest,也想源码理解下 unittest 的运行机制,故不考虑 pytest

昨日同事提的建议,新建两个.py,均继承 TestCase,一个.py 中 setUpClass 执行登录,另一个 tearDownClass 执行退出,其他的 TestCase 里面不执行登录和退出
通过命名,控制这两个.py 的执行顺序来达到目的

Andy 回复

感谢提供的单例和 atexit 思路

以下是参考后的方案

请问还有其他的 单例实现方法吗? 😂

利用多线程,登录一个线程,case 一个线程。登录线程在登录完后 waite,直到 case 线程运行完 case,case 线程设置 set,登录线程在根据 set 去执行退出的操作。不知道这个思路可否😀

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册