通用技术 浅谈 自研测试框架提升改造 (二)

陈子昂 · 2020年02月29日 · 1048 次阅读

前文

延期了,原来定周三的,赶紧完成一下,继续前文。
文章主要用 python 和 java 的形式,会按一个进阶的顺序去写,但不会很体系化的去写。

支持测试用例重排

一个大型和复合的测试框架,如果使用添加测试套件和插件式的单元测试框架,是的确可以实现大部分任务的。
那我们如何进行进阶改造呢?
添加测试套件,不要使用根据文件夹然后批量导入的,而是可以根据定义内容去重排的

Python推荐使用 unittest

from caseproject.testcase.Test_1_Login import Test_1_Login
from caseproject.testcase.Test_2_NewCity import Test_2_NewCity

1.导入 2 个测试用例文件,但不必引用他
2.下面使用 globale+dir 对象方式获取上面对象的内部函数,过滤出是测试用例的函数方法名,最后转换成类名.符合规则的成员函数。
3.符合规则成员函数为 test_*() 方法。
4.然后传入一个重排的函数中,通过循环添加 使用 unittest 自带的 addSuite(类对象,上面获取方法名)

Java 推荐使用 TestNg,推荐使用监听器和 xml 形式,类似 python 做法。
1.通过遍历文件,在通过反射获取对应成员函数(唯一需要解决的是反射出来的结果,顺序是随机的,这个后面有文章可以解决)
2.然后根据 xml 坐标生成 xml(有点像生成报告和自定义邮件一样,xml 是有一定样式的)。
同理,如果要多线程跑,还可以根据策略生成 xml 坐标配置。

前置任务的多种能力

前置任务是指一些任何和 case 如果账号数据需要满足前置条件,比如清档,修改数据库,重启数据库,还有简单的定义初始化 app,web 等等。
这部分原来大部分都会放到单元测试框架载入后的下面,这里推荐是取出来的,通过不同项目定义不同的检查流进行处理。
目前我们目前自动化,除了常规的 CI 打包拉取下载包之外,还会检查包里面信息,判断这个包是否 debug 版本和对应版本号,里面是否加密等。
账号数据如果先需要 自动清档,ssh 服务器自动化脚本清除数据后,这些环节一环扣一环,不用设计模式其实也没问题,串行顺序编程就行。
除了让前置任务的链长更长之外,那么如果对这个自动化任务记录万一在启动 app 之前的错误在哪里,并且通知邮件和阶段性统计(阶段性统计是后面要讲的大数据能力,而不是单次的报告)
办法就是使用在不同流程设置一个 ID,自动化如果在哪个任务走不下去了 并且进行回到对应步骤恢复,自研的邮件模块那边会面对这个 ID 的错误信息格式发送一封邮件给对应 ID 的开发处理者。

元素和顺序如下

D ---场景步骤函数 --- ID对应切换恢复的路径------尝试恢复次数---|邮件模块---ID文本 ----对应开发者

邮件模块需要好好打磨去兼容更多功能。

Demo 如下

/**
 * 场景处理
 */
public class Scence {

    /**
     * 执行具体方法
     * @param clazz
     * @param method
     */
    public static void action(Object clazz,Method method)
    {
        try {
            method.invoke(clazz, null);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

/**
 * 控制器
 */
public class Control {
    public void invoke(int cmd) {
        Select select = new Select();
        try {
            switch (cmd) {
                case 1001:
                    Scence.action(select,Select.class.getMethod("行为1", null));
                    break;
                case 1005:
                    Scence.action(select,Select.class.getMethod("行为2", null));
                    break;
                default:
                    System.err.println("不在命令号"+cmd);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

注意点是通过命令号,通过命令号去具体知道是什么场景,命令号绑定一个枚举关系。当然具体怎么写都行。
思想是使用 protobuff 文件约束行为的思想,用命令号去约定行为,当然也可以就使用 protobuff,当成一个服务来写就行

预告

今天先写到这里,下段部分 7 号之前完成。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册