自动化测试模型(线性,驱动,数据)

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()
View Code

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)
View Code

这样我们就可以随时修改登录用户名和密码,同时又不用改变别的文件,这样我们登录,退出的这个方法,复用性也强, 别的人也可以调用;

原文地址:https://www.cnblogs.com/surewing/p/7874341.html