1、自动化测试模型:
自动化测试的模型可以看作自动化测试框架与工具设计的思想,自动化测试不仅仅是单纯的谢谢脚本运行就可以了,还需要考虑到如何使脚本运行的效率提高,代码复用,参数化等问题,自动化测试模型分为四大类,线性模型,模块化驱动测试,数据驱动,关键字驱动;
本地web测试站点搭建:
工具:帝国CMS
下载地址:http://www.phome.net/downloads
安装步骤:
1.解压安装包;
2.将安装包的EmpireServer目录放到自己想放置的路径里面
3.双击文件里面的一键安装.bat(以管理员的身份运行)
4.至此,运行环境及帝国CMS全部安装完毕
5.安装完毕在浏览器中输入:http://localhost/e/admin后回车,进入帝国CMS的后台登录界面
前台地址:http://localhost
后台地址:http://localhost/e/admin(登录用户名,密码与认证码均为admin)
搭建完成注册一个测试的账号:wang 密码:123456(自己注册)
2、线性流程:
线性流程中每个脚本都是相互独立的,且不会产生其他的依赖与调用,其实就是简单模拟用户某个操作流程的脚本
案例:
在帝国软件主页自动登录和退出操作:
地址栏里面输入localhost,然后开始定位各个元素,用户名框,密码框,登录按钮,退出按钮
具体代码如下:
1 from selenium import webdriver 2 from time import sleep 3 4 driver=webdriver.Chrome() 6 driver.get("http://localhost") 8 sleep(2) 9 #定位用户名,输入用户名; 10 driver.find_element_by_name("username").clear() 11 driver.find_element_by_name("username").send_keys("wang") 12 #定位密码,输入密码; 13 driver.find_element_by_name("password").clear() 14 driver.find_element_by_name("password").send_keys("123456") 15 #点击登录 16 driver.find_element_by_name("Submit").click() 17 sleep(5) 18 #点击退出 19 driver.find_element_by_link_text("退出").click() 20 sleep(3) 21 driver.switch_to_alert().accept() 22 driver.quit()
二:模块化驱动
模块化驱动测试:
线性模型虽然每个用例都可以拿出来独立运行,但是用例之间重复代码很多,开发,维护成本高,其实把重复的操作代买封装为独立的公共的模块,当用例执行时,需要用到这部分直接调用即可,这是模块驱动的方式,比如登录系统,退出登录,截图函数等等;
首先我们先建立一个文件:mokuaiqudong.py,然后把上述的代码封装一下:
1 from selenium import webdriver 2 from time import sleep 3 driver = webdriver.Chrome() 4 driver.get("http://localhost") 5 6 class Login: 7 #登录方法: 8 def user_Login(self,driver): 9 #定位用户名,输入用户名; 10 driver.find_element_by_name("username").clear() 11 driver.find_element_by_name("username").send_keys("wang") 12 #定位密码,输入密码; 13 driver.find_element_by_name("password").clear() 14 driver.find_element_by_name("password").send_keys("123456") 15 #点击登录: 16 driver.find_element_by_name("Submit").click() 17 sleep(5) 18 #点击退出方法: 19 def user_logout(self,driver): 20 driver.find_element_by_link_text("退出").click() 21 sleep(3) 22 driver.switch_to_alert().accept() 23 if __name__ == '__main__': 24 driver = webdriver.Chrome() 25 driver.get("http://localhost") 26 driver.implicitly_wait(10) 27 Login().user_Login(driver) 28 sleep(2) 29 Login().user_logout(driver) 30 sleep(3) 31 driver.quit()
注意:if __name__ == '__main__':这个代码:
__name__ 是当前模块名,当模块被直接运行时模块名为 __main__ 。这句话的意思就是,当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行。(这个方法只是用来在当前界面调试用的;)
2.我们在同一个文件下,建一个文件call_mokuaiqudong.py
3.在call_mokuaiqudong.py文件里面写入如下代码,调用mokuaiqudong.py的文件
1 #导入mokuaiqudong.py的所有文件 2 from mokuaiqudong import * 3 #导入webdriver文件 4 from selenium import webdriver 5 from time import sleep 6 driver = webdriver.Chrome() 7 driver.get("http://localhost") 8 #隐式等待 9 driver.implicitly_wait(10) 10 #调用登录类方法 11 Login().user_Login(driver) 12 sleep(3) 13 #调用退出的类方法 14 Login().user_logout(driver) 15 sleep(3)
三:数据化驱动:
模块驱动的模型虽然解决了脚本的重复问题,但是需要测试不同数据的用例时,模块驱动的方式就不很适合了,数据驱动就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变,装载数据的方式可以是列表,字典或是外部文件,TXT。CSV,xml,Excel文件,目的就是实现数据和脚本的分离;
对于上述的登录用户名都是写死的,就不能修改为别的,就只能通过手动的修改,现在我只能通过数据的修改,修改用例;
1.在刚才localhost里面在重新注册一个企业的号,小编这里注册了一个andmin1,密码123456
然后我们在我们的mokuaiqudong.py里面加入参数username,password,这样在call_mokuaiqudong.py这个文件里面,我们调用的时候就可以直接给用户名和密码了;
2.mokuaiqudong.py的代码如下:
1 from selenium import webdriver 2 from time import sleep 3 driver = webdriver.Chrome() 4 driver.get("http://localhost") 5 6 class Login: 7 #登录方法: 8 def user_Login(self,driver,username,password): 9 #定位用户名,输入用户名; 10 driver.find_element_by_name("username").clear() 11 driver.find_element_by_name("username").send_keys(username) 12 #定位密码,输入密码; 13 driver.find_element_by_name("password").clear() 14 driver.find_element_by_name("password").send_keys(password) 15 #点击登录: 16 driver.find_element_by_name("Submit").click() 17 sleep(5) 18 #点击退出方法: 19 def user_logout(self,driver): 20 driver.find_element_by_link_text("退出").click() 21 sleep(3) 22 driver.switch_to_alert().accept() 23 if __name__ == '__main__': 24 driver = webdriver.Chrome() 25 driver.get("http://localhost") 26 driver.implicitly_wait(10) 27 Login().user_Login(driver) 28 sleep(2) 29 Login().user_logout(driver) 30 sleep(3) 31 driver.quit()
3.call_mokuaiqudong.py的代码如下:
1 #导入mokuaiqudong.py的所有文件 2 from mokuaiqudong import * 3 #导入webdriver文件 4 from selenium import webdriver 5 from time import sleep 6 driver = webdriver.Chrome() 7 driver.get("http://localhost") 8 #隐式等待 9 driver.implicitly_wait(10) 10 #调用登录类方法 11 Login().user_Login(driver,'wang','123456') 12 sleep(3) 13 #调用退出的类方法 14 Login().user_logout(driver) 15 sleep(3) 16 17 Login().user_Login(driver,'admin1','123456') 18 sleep(3) 19 20 Login().user_logout(driver) 21 sleep(3)
这样我们就可以随时修改登录用户名和密码,同时又不用改变别的文件,这样我们登录,退出的这个方法,复用性也强, 别的人也可以调用;