今天可以说是一个特殊的日子,上午参加了集团测试小伙伴们的述职让自己存在颇多感触,还得弄个ppt几天后和他们一起分享。无奈~~~~说说那些事。
回想刚毕业的自己懵懵懂懂,领导问会不会性能、会不会自动化,我马上回答的肯定是:会!最后无论好差都交差了,不过回想起来再去看看那时候自己弄的东西时显得拿不出手。同感在今天的述职中也遇见了很多小伙伴都说到了这样的事情让我倍感亚历山大,不过心里在想还好几个大牛没来不然今天这个就坑了。遇见的基本如下:工作了近两年的A小伙伴上去说我这几个月做了什么收获什么,在做了什么时就说我对XXX系统进行了性能测试,在查看了各项数据后对系统进行评估是合格的。对xxx功能模块进行了自动化测试,对每次的迭代更新后都测试了减少了工作量。于是乎展示了他部分的性能报告、自动化脚本等,完了之后领导让做点评,这让我不知从何说起,在另外一个同事的怂恿下说了点点。结束后上去了B\C......近10位小伙伴,但是在整个过程中都有很多相同的问题,这其实和当初的自己一样,校招略坑!
简单说说几个方面吧,自动化测试(无论是web还是以移动端)不是大家经常接触的随便找一个软件然后录制一下最后改吧改吧都可以了的,你那样弄出来的自动化脚本是否拥有可重用性?是增加了工作量还是减少了工作量?是不是只是觉得自己这样做了有高大上的感觉?其实这些做的都是无用功。对自动化有一定的了解的人都知道所谓的自动化都是基于元素来的,如果在一个系统不稳定的、迭代块的情况下做自动化也是徒劳的。如果说自己连功能都做不好也就别想着做自动化了,如果自己连功能的测试用力都无法写好那么也别想写好自动化的测试用例了。前段时间和小伙伴分享的时候他们惊奇的说:自动化测试还要写测试用力?当时我不知道怎么来回答,一脸茫然。很早的时候大家都再说用例的可执行性,别人写的用例你看不懂你肯定会骂人的,那么自动化测试一样,你写的自动化测试用例别人看不懂就没法写脚本了。换而言之当计算机看不懂我们写的代码时那么他不会骂人只是不执行报错而已。所以自动化测试用例是自动化测试的基础(当然前提是系统稳定什么的)。比如一个登录的测试用例怎么写呢?小伙伴们都是:1、在用户栏输入xxxx,2、在密码栏输入xxxx,3、点击登录按钮,登录成功。很多小伙伴都是这样,其实不对。相对标准的用例应该是这样:
1、打开Firefox()浏览器
2、在打开的Firefox()浏览器地址栏输入"http://www.xxxxxx.com"
3、在id为username的用户栏输入正确的用户帐号:xxxxxxx
4、在id为password的密码栏输入正确的密码:xxxxxx
5、点击id为login的“登录”按钮
6、用户登录成功,跳转到xxxxx页面
有的小朋友说这样太麻烦了,其实这还不算标准的,其实我们还有很多的东西没有写出来。比如你是不是应该在第6条后面再加一条断言呢?登录成功没呢?登录后跳转的页面对不呢?登录后的用户信息对吗?这些你都要考虑进去,如果出现串cookie的情况所以这些都是必要的!最后小伙伴们都问了那我们是不是这样将用例翻译成脚本就行了呢?答案肯定是否定呢?你觉得这样的脚本有用吗?我觉得没有!因为这脚本没有可用性,没有可维护性。why?如果我要换一个帐号登录你怎么办?不断更改?如果元素id变了呢?这有复用性吗?分享当时小伙伴们怒了,那这自动化根本就没用还麻烦。答案其实是否定的,只是我们方式不对而已。按照刚才的翻译出来是这样。
from selenium import webdriver
#1、打开Firefox()浏览器
dr = webdriver.Firefox()
#2、在打开的Firefox()浏览器地址栏输入"http://www.xxxxxx.com"
dr.get(‘http://www.xxxxx.cm‘)
#3、在id为username的用户栏输入正确的用户帐号:xxxxxxx
dr.find_element_by_id("username").send_keys("xxxxxx")
#4、在id为password的密码栏输入正确的密码:xxxxxx
dr.find_element_by_id("password").send_keys("xxxxxx")
#5、点击id为login的“登录”按钮
dr.find_element_by_id(‘login‘).click()
#6、用户登录成功,跳转到xxxxx页面
assert"xxxx" in dr.title #‘xxxx‘是否在title里面 也可以添加其他的断言
草草的写了一下最后的一个登录测试脚本 应该是这样的:
from selenium import webdriver
import unittest
class TestLogin(unittest.TestCase):
Login_url = ‘http://www.xxxx.com‘
dr = None
def setUp(self):
print ‘test start‘
self.dr = webdriver.Firefox()
def tearDown(self):
self.dr.quit()
def test_Login(self):
username = ‘sssss‘
password = ‘xxxxx‘ #可以调用外面的
self.dr.get(self.Login_url)
self.login(username,password)
t = self.dr.find_element_by_id(‘login‘) #查找元素为login的东西 登录后的
self.assertTrue(username in t.text) #断言
pass
def login(self,user,pwd):
#3、在id为username的用户栏输入正确的用户帐号:xxxxxxx
self.dr.find_element_by_id("username").send_keys(user)
#4、在id为password的密码栏输入正确的密码:xxxxxx
self.dr.find_element_by_id("password").send_keys(pwd)
#5、点击id为login的“登录”按钮
self.dr.find_element_by_id(‘login‘).click()
if __name__ == ‘__main__‘:
unittest.main()
一个登录的自动化测试用例就是这样的(完成度95%)。
性能测试需要的东西很多暂时先提一下:开发语言(方便些性能脚本)、中间件知识、服务器知识、数据库知识、网络知识这些差不多都需要会。所以这不是简单活,后面简单说下,睡觉了!