其他测试框架 java+dubbo+testng 接口自动化,1500 条 case 允许时间 14 小时左右,有大佬有比较好的解决方法吗

差班生 · 2023年06月19日 · 最后由 陈先生 回复于 2023年07月07日 · 6639 次阅读

框架用了 GenericService 泛化调用,但是每个 test 在运行时会吧全部的 Bean 都加载一遍,太费时间了。有什么比较好的解决方法吗?

共收到 9 条回复 时间 点赞

beforeClass 是多少测试类就跑多少次,所以会多次加载。把 beforeClass 换成 beforeSuite,保证初始化一次执行只跑一次就行。或者 genericService 换成懒加载单例,不在初始化里面生成实例而是用例里面去取实例。

mai 回复

谢谢,懒加载单例是指,用到就去生成实例?不用就不生成吗?

你们不和 spring 集成么?把 rpc 接口注册成 bean 就行了

我这边是通过配置 package,然后扫描所有的类,然后统一创建 rpc 调用对象放入 spring 容器里面。设置懒加载之后,直接注入就可以用了。后续如果有新增的 rpc 接口 更新下 jar 包就可以用了

lumen 回复

目前没有和 spring 集成,很尴尬,所以 case 运行时间很长。整个脚本初始化第一次完成加载之后,每个 test 不需要单独加载一份了吧?

差班生 回复

对,这样你 setup 里面就没必要去初始化 genericService 了,你一次跑用例也不会全部接口都跑吧?

mai 回复

不会的。可能会调用多个接口。全部跑完不可能的。

不会 java,我用 python 的getattribute实现,你看看 java 有没有类似的方法

class LoginApi():
    # 登录接口实现
    def login(self,):
        pass


class ApiInit:
    # 接口映射
    login = LoginApi

    # 设置属性拦截
    def __getattribute__(self, item):
        # 返回实例化的接口对象
        return object.__getattribute__(self,item)()

# 实例化ApiInit
api = ApiInit()
# 接口只会在每次调用时才会实例化
api.login.login()

多线程啊,testng 本来就支持多线程,配置下就行

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