zoukankan      html  css  js  c++  java
  • 自动化测试模型(线性,驱动,数据)

    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

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

  • 相关阅读:
    Android学习总结——实现Home键功能
    Android学习总结——SQLite
    Android学习总结——文件储存
    Android学习总结——SharedPreferences
    Android学习总结——Content Provider
    Android学习总结——Service组件
    IDEA 创建和使用tomcat
    IDEA 图标介绍。 缓存和索引介绍、清理方法和Debug使用
    IDEA 常用快捷键
    IntelliJ IDEA常用设置(一)
  • 原文地址:https://www.cnblogs.com/surewing/p/7874341.html
Copyright © 2011-2022 走看看