Board logo

标题: 一个智能的 Web 界面测试系统 -2 介绍测试系统流程 [打印本页]

作者: look_w    时间: 2018-8-23 20:46     标题: 一个智能的 Web 界面测试系统 -2 介绍测试系统流程

介绍测试系统流程以上我们简要介绍了 Web2.0 的概念和相关客户端技术。为确保客户端产品的质量,我们需要使用与此相应的 Web 测试工具,从而方便地融合于产品测试中。此外,为适应 Web 开发的灵活性,我们同时需要一个能够快速配置、部署、运行和汇报结果的测试系统,从而实现智能高效的测试流程,降低软件研发的成本。
基于以上论述,下面将介绍一个智能的 Web 界面测试系统。该系统有四大模块组成,主体主要由 Python 语言实现,结合几种开发工具和技术,包括 Ant、Selenium、TestNG、XML 和 Flex。系统有两个控制方式:时间和 Web 管理站点。时间逻辑在 Python 脚本中实现,当时间到来时系统会按顺序下载源代码、部署应用程序、运行自动测试、发布报告;而 Web 管理站点通过 Flex 和 JAVA 技术来实现,用户可以按需在线配置某些模块,并要求立即执行自动测试。
下面将详细介绍每个模块的具体工作内容。测试流程参见图 1。
图 1. 测试系统概述源代码和安装包的按需下载在软件开发过程中,每天都会因新的功能而更改源代码。此外,很多项目需要国际团队合作,这些情况下代码的更新频率更加高。本土和国外团队经常需要共享源代码,而源代码可能被存放在固定的站点上面。当源代码文件量大而站点距离遥远的时候,下载代码的任务就比较耗时。为了节省这方面的时间,提高团队整体的工作效率,有必要让这部分工作自动化起来。所以,系统首先实现了一个结合 Python 和 XML 的下载控制模块。它的逻辑比较简单(参见图 2)。Python 程序定时读取配置文件,判断该任务当前是否可以运行。如果此刻时间和配置的时间一致,就访问站点,下载代码包。否则,放入等待队列,获取下一个任务。在等待队列里面的任务会在一定时间后重新启动。
图 2. 下载流程下载配置文件的内容参见以下代码:
清单 1.下载配置文件的代码
1
2
3
4
5
6
<?xml version="1.0" encoding="utf-8"?>
<items>
<item name="download source files" type="source" weekday="-1" time="7:-1"
source="https://sample.sourcecode.com"
target="C:\sourcetar\"/>
</items>




读取下载配置文件的代码如下:
清单 2.读取下载配置文件的代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from xml.dom.minidom import parse, parseString
from MyDownloadTask import MyDownloadTask

def readFromProperty(xmlfile):
   tasklist = []
   dom = parse(xmlfile)
   for node in dom.getElementsByTagName('item'):
       name = node.getAttribute('name')
       weekday = node.getAttribute('weekday')
       time = node.getAttribute('time')
       source = node.getAttribute('source')
       target = node.getAttribute('target')
       type = node.getAttribute('type')
        
// 定义一个下载任务
       task = MyDownloadTask()
       task.create(name, weekday, time, source, target, type)
// 加入下载任务列表
       tasklist.append(task)
        
   return tasklist




实现具体的下载逻辑如下:
清单 3.实现下载的代码
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
class MyDownloadTask(object):
   
   …… // 定义一些变量
   
   def create(self, name, weekday, time, source, target, type):
       self.name = name
       self.weekday = int(weekday)
       self.source = source
       self.target = target
       index = time.find(":")
       self.hour = int(time[0:index])
       self.minute =  int(time[index+1:])
       self.type = type
     
    def run()

// 使用用户名和密码通过防火墙
password_mgr = urllib.request.HTTPPasswordMgrWithDefaultRealm()
password_mgr.add_password(None, self.source, username, password)
handler = urllib.request.HTTPBasicAuthHandler(password_mgr)
opener = urllib.request.build_opener(handler)
urllib.request.install_opener (opener)

// 从站点下载文件
content = urllib.request.urlopen(self. source).read()
f=open(self.target + self.buildno,"wb")
f.write(content)
f.close()




此例指出目前有一项下载任务,下载类型是源代码,链接为 https://sample.sourcecode.com, 将其保持到 C 盘 sourcetar 文件夹下,时间为每天早上 7 点钟。(-1 代表任意时间)。项目组可以根据需要增加下载项。比如,我们项目组由于资源文件经常要修改,所以需要每天上午和下午都要检测是否有新的代码包,所以配置了两个下载任务。上午的时间一般都在 7 点,这样可以在每位同事上班打开电脑的那个时刻就获得大洋彼岸美国项目组下班时候的最新进展。
正如前文所述,该测试系统中我们提供一个 Web 管理站点,用户可以根据项目的需要配置下载任务,不必麻烦系统管理员来修改下载配置文件。该模块使用 Flex 和 Java 技术实现(参见图 3)。用户可以通过它了解当前系统已有的下载任务。此外,用户也可以通过管理站点创建,修改和删除下载任务。这些更改最终都会被保存到 XML 配置文件中。
图 3. 下载管理界面应用程序的部署对 Web 应用程序而言,测试的第一步是部署。有了源代码后,测试系统使用 Ant 编写的脚本编译源代码,停止当前已有的 Web 服务器,部署产品代码,然后重新启动 Web 服务器。在这段时间中,产品的测试环境可能暂时无法访问(参见以下代码)。
清单 4.代码部署
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
def deploybuild(self):
      … // 清理文件夹,将源代码解压到 d 盘 buildtar 目录
      try:
           tar = tarfile.open(self.target + myHtml.srcbuild, "r:gz")
           for tarinfo in tar:
               print(tarinfo.name, "is", tarinfo.size, "bytes in size")
           tar.extractall("d:/buildtar")
           tar.close()
       except :
          …

       // 编译源代码
       os.chdir("d:/buildtar")
       os.system("Ant all")

       // 关闭 web 服务
       os.system("net stop \”servicename\"");

       … // 部署系统

       // 开启 web 服务
       os.system("net start \"servicename\"")




运行自动测试脚本当新版本的 Web 应用程序部署完后,测试系统就开始进入自动测试。本系统使用 SVN 对测试脚本进行版本控制。所以有必要在一开始通过 SVN 更新最近的测试脚本。这里使用 Ant 来调用 SVN 的命令行工具,参见下图。
使用如下 Python 脚本调用相应的 Ant 任务:
清单 5.Python 脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def runseleniumtestcase(self):
   // 下载测试脚本
   os.chdir("d:/")
   os.system("Ant download-testcase -buildfile=task.xml")

// 运行测试脚本
os.chdir("d:/v510")
os.system("Ant start-selenium -buildfile=build.xml")

<target name="download-testcase">
<delete dir ="v100"/>
    <property environment="env"/>
    <exec executable="cmd">
<env key="PATH" path="${env.PATH}:C:/Program Files/CollabNet Subversion Client"/>
   <arg value="/c"/>
            <arg value="svn"/>
            <arg value="checkout"/>
   <arg value="svn://9.19.199.9/web/v100"/>
</exec>
</target>




事例中的任务 download-testcase 用来从站点 9.19.199.9 的 web/v100 目录下载最新版本的测试脚本。start-selenium 任务将启动 selenium 的 proxy server,然后按照 TestNG 配置的顺序运行测试脚本。
测试系统的脚本应用 Selenium 和 TestNG 的测试工具,实现对各类型 Web 界面的测试需求。在第三节中将详细介绍 Selenium 工具在本系统的应用,并在第四章中介绍 TestNG 工具在配置 Selenium 测试脚本中的作用。
  为适应项目开发周期不同阶段的测试需求,Web 管理站点将列出当前所以测试案例。用户可以自由地挑选下次测试需要的用例。当用户选择保存后,这些测试脚本就会在下次系统自动部署时候被运行。如果用户选择运行,那么系统可以马上在当前已部署的产品环境上运行测试脚本。
发布自动测试报告运行完自动测试用例后,测试结果自动生成于测试工具目录下面。这样会覆盖原先的文件,不利于项目的跟踪和信息的交流。所以,我们的测试系统会将测试报告发布到 Web 管理站点。用户只需按照上面的时间点击链接,就可以看到每次测试的运行结果(参见图 4)。
图 4. 测试报告界面




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0