关于项目自动化测试架构的改良计划 - 分离出动作指令信息

简介:

但是,我们这些动作指令信息毕竟是让测试用例数据的设计者告诉Engine怎样修改原始数据集合的,所以我们必须把这些信息分离出来,但是刚才一步骤,已经把这些片断移除了,那么怎么把这些信息拿到呢?很简单,不是我们有原始数据么,所以我们就可以对于原始数据的xml字符串,一个testcase,一个testcase的吧这些动作指令解析出来并且存放在相应的Value Object 列表中,以后我们只要根据这些列表中提供的信息就可以正确的对于原来的数据集合进行操作了。


分离信息的类叫XMLModifyInfoExtractor,它负责分离动作:

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/**
      * extract all the modification information and store to member fields.
      * @param filePath
      * @throws Exception
      */
     public  void  extractModifyInfo(String filePath)  throws  Exception{
              
         SAXReader reader =  new  SAXReader();
         Document document = reader.read( new  File(filePath));
              
         Element rootElement = document.getRootElement();
              
         String testcaseElementPathValue;
              
              
         Element addElements;
         Element addElementPath;
         String addElementPathValue;
         Element addElementValue;
         String addElementValueValue;
              
         Element updateElements;
         Element updateElementPath;
         String updateElementPathValue;
         Element updateElementValue;
         String updateElementValueValue;
              
         Element removeElements;
         Element removeElementPath;
         String removeElementPathValue;
              
         //first ,get all the <test_case> element
         List<Element> testcaseElementList = rootElement.elements( "test_case" );
         for (Element testcaseElement : testcaseElementList){
                  
             testcaseElementPathValue = testcaseElement.getUniquePath();
                  
             //get <add_elements> part from the <test_case>
             addElements= testcaseElement.element( "add_elements" );
             if (addElements!= null ){
                      
             //traverse the <add_elements> to get a seris of <add_element>
             List<Element> addElementList = addElements.elements( "add_element" );
             for (Element addElement : addElementList){
                 //extract the <path> information from <add_element>
                 addElementPath = addElement.element( "path" );
                 addElementPathValue = addElementPath.getTextTrim();
                 //extract the <value> information from <add_element>
                 addElementValue = addElement.element( "value" );
                      
                      
                 String xmlValue=addElementValue.asXML();
                 //remove the <value> and </value> part from this xml
                 addElementValueValue=xmlValue.replace( "<value>" , "" ).replace( "</value>" , "" );
                 addElementInfoList.add
                 ( new  AddElement(testcaseElementPathValue,addElementPathValue,addElementValueValue));
             }
                  
             }
                  
             //get <update_elements> part from the <test_case>
             updateElements= testcaseElement.element( "update_elements" );
             if (updateElements!= null ){
                      
                  
             //traverse the <update_elements> to get a seris of <update_element>
             List<Element> updateElementList = updateElements.elements( "update_element" );
             for (Element updateElement : updateElementList){
                 //extract the <path> information from <update_element>
                 updateElementPath = updateElement.element( "path" );
                 updateElementPathValue = updateElementPath.getTextTrim();
                 //extract the <value> information from <update_element>
                 updateElementValue = updateElement.element( "value" );
                 updateElementValueValue=updateElementValue.getTextTrim();
                      
                 updateElementInfoList.add
                 ( new  UpdateElement(testcaseElementPathValue,updateElementPathValue,updateElementValueValue));
             }
                  
             }
                          
                  
             //get <remove_elements> part from the <test_case>
             removeElements= testcaseElement.element( "remove_elements" );
             if (removeElements !=  null ){
                      
                  
             //traverse the <remove_elements> to get a seris of <remove_element>
             List<Element> removeElementList = removeElements.elements( "remove_element" );
             for (Element removeElement : removeElementList){
                 //extract the <path> information from <remove_element>
                 removeElementPath = removeElement.element( "path" );
                 removeElementPathValue = removeElementPath.getTextTrim();
                      
                 removeElementInfoList.add( new  RemoveElement(testcaseElementPathValue,removeElementPathValue));
             }
                  
             }
         }
              
                          
     }


现在经过上述3步骤之后,我们的代码中所有的动作序列的执行内容都被存放在相应变量中了。





本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/1221749,如需转载请自行联系原作者
目录
相关文章
|
28天前
|
前端开发 JavaScript 测试技术
Kotlin教程笔记 - 适合构建中大型项目的架构模式全面对比
Kotlin教程笔记 - 适合构建中大型项目的架构模式全面对比
30 3
|
25天前
|
监控 前端开发 数据可视化
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
@icraft/player-react 是 iCraft Editor 推出的 React 组件库,旨在简化3D数字孪生场景的前端集成。它支持零配置快速接入、自定义插件、丰富的事件和方法、动画控制及实时数据接入,帮助开发者轻松实现3D场景与React项目的无缝融合。
94 8
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
|
23天前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法。本文介绍 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,同时提供 Python 实现示例,强调其在确保项目性能和用户体验方面的关键作用。
29 6
|
23天前
|
存储 人工智能 编译器
【AI系统】CPU 指令集架构
本文介绍了指令集架构(ISA)的基本概念,探讨了CISC与RISC两种主要的指令集架构设计思路,分析了它们的优缺点及应用场景。文章还简述了ISA的历史发展,包括x86、ARM、MIPS、Alpha和RISC-V等常见架构的特点。最后,文章讨论了CPU的并行处理架构,如SISD、SIMD、MISD、MIMD和SIMT,并概述了这些架构在服务器、PC及嵌入式领域的应用情况。
49 4
|
25天前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段。本文介绍了 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,强调了样本量、随机性和时间因素的重要性,并展示了 Python 在 A/B 测试中的具体应用实例。
27 1
|
28天前
|
监控 安全 测试技术
如何在实际项目中应用Python Web开发的安全测试知识?
如何在实际项目中应用Python Web开发的安全测试知识?
28 4
|
1月前
|
网络协议 关系型数据库 应用服务中间件
【项目场景】请求数据时测试环境比生产环境多花了1秒是怎么回事?
这是一位粉丝(谢同学)给V哥的留言,描述了他在优化系统查询时遇到的问题:测试环境优化达标,但生产环境响应时间多出1秒。通过抓包分析,发现MySQL请求和响应之间存在500毫秒的延迟,怀疑是网络传输开销。V哥给出了以下优化建议:
|
1月前
|
前端开发 JavaScript 测试技术
android做中大型项目完美的架构模式是什么?是MVVM吗?如果不是,是什么?
在 Android 开发中,选择合适的架构模式对于构建中大型项目至关重要。常见的架构模式有 MVVM、MVP、MVI、Clean Architecture 和 Flux/Redux。每种模式都有其优缺点和适用场景,例如 MVVM 适用于复杂 UI 状态和频繁更新,而 Clean Architecture 适合大型项目和多平台开发。选择合适的架构应考虑项目需求、团队熟悉度和可维护性。
53 6
|
1月前
|
存储 前端开发 数据可视化
在实际项目中,如何选择使用 Flux 架构或传统的 MVC 架构
在实际项目中选择使用Flux架构或传统MVC架构时,需考虑项目复杂度、团队熟悉度和性能需求。Flux适合大型、高并发应用,MVC则适用于中小型、逻辑简单的项目。
|
2月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
64 4

热门文章

最新文章