延期了,原来定周三的,赶紧完成一下,继续前文。
文章主要用 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 号之前完成。