安卓自动化测试总结(五)——测试结果发送及内容展示
使用jenkins自动构建并完成自动化测试后,如果想看测试结果,都需要打开jenkins构建地址,找到对应的构建及构建结果。这样做很麻烦,关心自动化测试结果的人可能在测试用例未执行或没有执行完时,多次打开该构建;或者在运行多次错误结果后,也未看过执行结果。所以,提出了使用邮件发送测试结果的想法。
发送测试结果邮件
借用我们接口测试的python发邮件代码,实现了安卓自动化测试结果的自动发送。其发送邮件的示例如下:
def sendMail(self):
smtp = smtplib.SMTP()
smtp.connect(self.smtpserver,25)
smtp.login(self.sender,self.password)
self.content =base64.b64encode(self.content)
msg ="From:%s\nTo:%s\nSubject:%s\nContent-Type:text/html\nContent-Transfer-Encoding:base64\n\n%s"% (self.sender,self.receiver,self.subject,self.content)
smtp.sendmail(self.sender,self.receiver, msg)
smtp.close()
其中self.sender,self.receiver,self.subject,self.content分别是发件人、收件人、主题和发送内容。我们发送邮件前,主要修改的是发送内容,可以是文本内容,也可以是表格或更复杂的邮件内容。
发送junit结果
发送文本或表格内容虽然可以满足测试要求,但没有jenkins中显示的junit结果简单明了。所以考虑直接借用jenkins中的junit测试结果。这样既减少代码量,又可以直接关联回jenkins中的对应链接。读取jenkins对应页的python代码如下。
user_agent ='Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.13(KHTML, likeGecko) Version/3.1Safari/525.13'
values = {'language':'Python'}
headers = {'User-Agent': user_agent }
data = urllib.urlencode(values)
req= urllib2.Request(urlConst, data, headers)
context = ssl._create_unverified_context()
response = urllib2.urlopen(req, context=context)
the_page = response.read()
testresult = the_page[the_page.index('<h1>Test Result</h1>') + len('<h1>Test Result</h1>):the_page.index('')]
testresult = testresult.replace('ahref="','ahref="'+ urlConst)
testresult = testresult.replace('
把testresult的内容,增加到发送的邮件self.content,就可以让邮件显示测试结果网页了。测试结果网页如下:
只发送有错误执行结果的邮件
由于测试自动化在开发提交代码后即立即执行,也因为有时进行调试导致更多的测试次数,很多人觉得邮件发送比较频繁。我们采取的改进方法是,在unstable状态下,才触发发送邮件的job。
合并多个junit结果
由于安卓界面自动化的用例有50多个,如果运行在一个jenkins任务,则运行时间比较长,在失败时,也可能有更多意想不到的问题。所以,每个jenkins任务仅执行10多个用例,从冒烟测试、一般测试、很慢的测试等多个角度考虑进行分组。但这样存在一个问题,如何得到一个完整的结果,而不是得到零碎的片面结果,由收到测试结果的人自己在去对比和合并,才能得到一个整体的印象。
后来想到的就是把测试结果从各个jenkins任务拷贝过来,然后进行合并,把合并后的结果,像一次执行的结果一样,发送邮件。因为,合并后的结果,本身就和一次执行得到的结果没有区别。
自动化结果的展示和邮件发送,不同的人提出了不同的问题,才逐渐改进成目前的样子。后续,将根据对当前结果的意见,继续改进,以便更能符合测试和开发的要求。