A 用例的返回参数如何传给 B 用例,两个用例是两个 py 文件分开的,除了 conftest 还有别的实现方式吗
利用一个 py 文件,作为中间变量?
先考虑下测试分层解耦吧,为什么 B 用例要用到 A 用例的返回数据,用例不是只要知道通过还是失败就行了吗。
如果测业务流程有数据依赖,把涉及到的方法组织在一起做一条完整的流程用例,而流程中的各个步骤使用各自独立的数据单独测试会不会好点。
非要这么干的话,用 redis 也是个选择。
建立一个共享数据库?
我的做法比较粗暴,前面用例获取到的数据放到一个公共变量里,后面的用例直接调用就可以了
用例之间最好不要相互关联,可以把 A 封装成一个公共方法
pytest 定义 scope 为 session 的 fixture,存放 py 模块之间的全局变量,每个用例动态添加进去相互复用,也许能达到你的效果,可以参考下https://testerhome.com/topics/27284
不过如何在一个用例中,引用其他用例,来实现用例级别的复用,还在思考中,等想好了再写篇文章来说说。
可以把 A 用例作为一个数据初始化的步骤进行封装,或者想办法在数据库创建数据替代 A 用例
建议可以分一下层,把一些多个用例可能用到的部分抽离到一个操作层。
操作层只封装操作,不封装断言。和用例相比主要差一句断言。
举个例子,登录 login 可以封装到一个操作层,参数是 username 和 password ,返回值是整个 response
用例可以直接调用 login 获取 response 做断言,形成登录相关的用例
也可以调用 login 放到准备阶段,作为被其他用例依赖的操作
当用例之间存在很多关联/依赖的时候,实现用例会越来越复杂,复杂到无法实现,更别提维护了。
所以 pytest 从设计上就不支持这样的操作,别的自动化测试框架也大都如此。
关联多没关系呀,类比业务系统里面微服务架构,各个 service 相互调用关联也很多。
但要保障的是,用例之间是需要有独立性的。可以封装背后的一些流程,但不要直接调用用例造成用例的依赖。
举个实际点的例子,信贷业务,完成流程需要完成 注册 - 登录 - 授信 - 审批 - 提现 - 还款 这么长的流程。还款的前提是前面 5 步都得完成。我们实际使用的时候会建立一个操作层(叫 operation),用来封装一些流程,比如会封装 授信 流程,里面会包含 注册、登录、授信 三个操作。然后封装审批,审批会包含 授信、审批 操作,如此类推,最后得到一个从零到完成提现的 提现 流程封装,还款时就可以直接调用这个封装作为 setUp 了。
在这些流程操作里,尽量不要有太多断言,只负责操作,不负责操作结果,这样才便于用例复用时用于各种异常场景。
同时这些流程封装,还可以抽离到一些 controller 暴露接口出来,用于平时测试时造数据。
不过其实一开始用例不多的时候,可以先直接把这些用例从头撸到尾,把那几个最重要的流程自动化用例搞出来在项目里使用。再逐步在增加用例的过程中重构抽离,找到自己最合适的方式。