自动化测试,从入门到跑路-1
年轻的测试哟,听说你要写自动化?
听说不想做自动化的测试,不是好开发。作为一名高贵的处女座软件测试工程师,区区自动化还是信手拈来的。(才不会告诉你,是我们老大要求我去写)
这里是背景:
因为某项目在迁移技术栈,从Ruby迁移至PHP,由于没有测试介入,导致上线后部分功能不可用,于是老大揪过来了测试,并且要求能写自动化的地方就尝试写些自动化。
作为本司唯二的测试,自然义不容辞的拉上了另外一个测试,从头把项目整理了一遍。
1、2、3,开始动手做
这次要做的事情是:检查界面显示文章的显示是否正常。
已经手动过了一遍,但是作为一名有理想、有追求、有想法的三有青年,怎么可能满足于这种机械重复的点点点,于是为了(偷懒)更高效、高质量的敏捷测试,打开万恶的PyCharm,新建Project,开始了这条不归路。
问,把界面做自动化,总共分几步?
第1步 分析界面
我们的网页是纯HTML项目,没有用Vue之类的框架,对测试来说还是比较友好的,很多界面的元素可以直接定位操作。
我们的目标是检查界面显示的内容是否有问题,化繁为简,也就是说界面显示的文本中,不包含1
'<div>'、'</div>'、'<a>'、'</a>'、'<'、'>'
等基本就没什么问题。
第2步 开开心心敲脚本
于是大手一挥,写出了一个函数:1
2def check_text(text):
return('<'in text)and('<' in text)and('>' in text)
检查用的函数已经搞定,剩下的就是获取页面元素了。
此次我们需要检查的界面有两个:1
url = [’链接A’, ’链接B‘]
尝试获取需要验证的部分,再偷懒简化下范围,只要界面第一页的文章列表,标题和摘要显示没问题,基本就OK了。
获取当前界面所有文章的标题和摘要:1
2item_title=driver.find_elements_by_class_name(’item_title’)
item_content_box= driver.find_elements_by_class_name(’item_content_box’)
剩下的就是把所有的内容检查一遍了:1
2
3
4
5
6
7
8
9
10
11
12
13
14def check_articles(num, titles, boxes):
for i inrange(0, len(titles)):
title = titles[i].text
box = boxes[i].text
if(check_text(title) or check_text(box)):
print('链接:'+ url[num])
print(title + box+ '显示错误')
driver.quit()
elif i < (len(titles)-1):
continue
else:
print('链接:'+ url[num])
print('所有文章标题和摘要,显示正常')
driver.quit()
最后就是启动我们伟大的webdriver,但是很慢,还好Chrome新增了headless模式,可以不用启动界面,速度快了好多。
自从用了headless,腰不酸了,腿不疼了,走路有劲了,一口气写五个测试脚本,不费劲。1
2
3chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
driver = webdriver.Chrome(chrome_options=chrome_options)
第3步 组合
本来是想用unittest组合起来,但是后来想想,就这么两个界面懒癌,还是算了,就这样也挺好。
最后的最后
这次只是检查了界面的基本显示,并没有对其他项目进行检查,也没有涉及到接口和业务逻辑的测试,关于这些内容,会放到后面进行详细展开。
我就是我,不一样的测试。