刚接触自动化测试,因为没有编程语言的基础,是搞不懂代码里面的函数、封装、包以及其余概念,只是了解字符串、数组、元组及字典这种最基本的名词,更不懂自动化测试框架了。php
在我这种外门汉的角度来看,代码不就是一页word文件写进去,从头执行到尾吗?其实否则,代码可不止一页word,不少页啊。html
看着虫师的书籍学习自动化测试,边看边敲仍是会忘记,想一想仍是作作笔记比较合宜。这篇笔记来粗略记下学习自动化测试的几种模型,可能再以后回来看会有特别的感觉,先这样记着吧。web
一、线性测试编程
线性测试,顾名思义,就是一条路按照一条直线走到底。它的每一个脚本都是独立的,均可以拿出来单独运行,来验证一个功能点,上两段小代码举个栗子:
数组
打开百度主页:浏览器
# coding:utf-8 from time import sleep # 从time中引入sleep from selenium import webdriver # 从selenium中引入webdriver driver = webdriver.Firefox() # 选择打开的浏览器 driver.maximize_window() # 浏览器窗口最大化 driver.implicitly_wait(3) # 隐式等待 driver.get("https://www.baidu.com") # 获取URL,打开页面 driver.quit() # 退出相关浏览器
打开百度主页,并输入查找内容:app
# coding:utf-8 from time import sleep # 从time中引入sleep from selenium import webdriver # 从selenium中引入webdriver driver = webdriver.Firefox() # 选择打开的浏览器 driver.maximize_window() # 浏览器窗口最大化 driver.implicitly_wait(3) # 隐式等待 driver.get("https://www.baidu.com") # 获取URL,打开页面 search = driver.find_element_by_id("kw") # 经过id定位搜索框 search.send_keys("selenium") # 填入"selenium" sleep(5) # 直接等待 driver.quit() # 退出相关浏览器
以上两段代码,分别作了实现打开百度首页和打开百度首页后输入查找内容的功能,均可以单独拿出来执行。若是须要修改查找访问页面,那么我须要两段代码都须要修改。当这类独立的脚本数量多了起来,去修改这些内容花费的工做量太大,将会失去了自动化的目的。
框架
二、模块化与类库编程语言
login.py模块化
# coding:utf-8 from time import sleep from selenium import webdriver # 从selenium中引入webdriver def login_mantis(): driver = webdriver.Firefox() # 选择打开的浏览器 driver.maximize_window() # 浏览器窗口最大化 driver.implicitly_wait(3) # 隐式等待 driver.get("http://192.168.1.201/mantisbt-1.2.19/login_page.php") # 获取URL,打开页面 sleep(1) # 直接等待 username = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[2]/td[2]/input") # 经过Xpath定位获取输入帐号框 username.send_keys("wuhaobo") # 输入帐号 sleep(1) password = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[3]/td[2]/input") # 经过Xpath定位获取输入密码框 password.send_keys("123456") # 输入密码 sleep(1) login = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[6]/td/input") # 经过Xpath定位获取登陆按钮 login.click() # 点击登陆按钮 sleep(3)
上面的代码实现了mantis登陆功能。
quit.py
# coding:utf-8 from selenium import webdriver # 从selenium中引入webdriver def quit_mantis(): driver = webdriver.Firefox() # 选择打开的浏览器 driver.quit() # 退出相关浏览器
上面的代码实现了mantis退出功能。
do_something_in_mantis.py
# coding:utf-8 from time import sleep # 从time中引入sleep from selenium import webdriver # 从selenium中引入webdriver import login # 引入登陆模块 import quit # 引入退出模块 login.login_mantis() # 调用登陆模块 print ">>>如下操做为在登陆界面后的操做" # 须要作的操做放在登陆和退出中间 print ">>>以上操做为在登陆界面后的操做" quit.quit_mantis() # 调用退出模块
上面的代码实现了调用登陆模块和退出模块。
经过以上代码能够发现,登陆模块和退出模块可让任意操做类脚本调用,省去了该部分代码的重复量,便于维护的同时,也加快了代码的开发速度。
三、数据驱动
直接理解成参数化输入,不一样结果输出。
(1)、读取TXT方式
将存好登陆的帐号密码放置在两个TXT文件中:
# coding:utf-8 from time import sleep from selenium import webdriver # 从selenium中引入webdriver username_file = open("G:\\joker_study\\username.txt") # 打开帐号文本路径 username = username_file.read() # 取出帐号 password_file = open("G:\\joker_study\\password.txt") # 打开密码文本路径 password = password_file.read() # 取出密码def login_mantis_by_txt(): driver = webdriver.Firefox() # 选择打开的浏览器 driver.maximize_window() # 浏览器窗口最大化 driver.implicitly_wait(3) # 隐式等待 driver.get("http://192.168.1.201/mantisbt-1.2.19/login_page.php") # 获取URL,打开页面 sleep(1) # 直接等待 username_input = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[2]/td[2]/input") # 获取输入帐号框 username_input.send_keys(username) # 输入帐号 sleep(1) password_input = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[3]/td[2]/input") # 获取输入密码框 password_input.send_keys(password) # 输入密码 sleep(1) login_button = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[6]/td/input") # 获取登陆按钮 login_button.click() # 点击登陆按钮 sleep(3) driver.quit() # 退出浏览器
上面的代码实现了从TXT文件中读出帐号和密码,再传入函数中,进行登陆操做。
(2)、经过函数
userconfig.py
# coding:utf-8 def username_password(username="CJOLER",password="123456"): return username,password
login.py
# coding:utf-8 from time import sleep from selenium import webdriver # 从selenium中引入webdriver import userconfig # 引入userconfig文件 un, pw = userconfig.username_password() print un, pw def login_mantis_by_txt(): driver = webdriver.Firefox() # 选择打开的浏览器 driver.maximize_window() # 浏览器窗口最大化 driver.implicitly_wait(3) # 隐式等待 driver.get("http://192.168.1.201/mantisbt-1.2.19/login_page.php") # 获取URL,打开页面 sleep(1) # 直接等待 username_input = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[2]/td[2]/input") # 获取输入帐号框 username_input.send_keys(un) # 输入帐号 sleep(1) password_input = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[3]/td[2]/input") # 获取输入密码框 password_input.send_keys(pw) # 输入密码 sleep(1) login_button = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[6]/td/input") # 获取登陆按钮 login_button.click() # 点击登陆按钮 sleep(3) driver.quit() # 退出浏览器
上面的代码实现了将帐号密码放在一个函数内,再去调用,进行登陆操做。
(3)、读取字典
userconfig.py
# coding:utf-8 def username_password(): config = {"username": "CJOKER", "password": "123456"} return config
login.py
# coding:utf-8 from time import sleep from selenium import webdriver # 从selenium中引入webdriver import userconfig # 引入userconfig文件 Data = userconfig.username_password() un = Data["username"] pw = Data["password"] def login_mantis_by_txt(): driver = webdriver.Firefox() # 选择打开的浏览器 driver.maximize_window() # 浏览器窗口最大化 driver.implicitly_wait(3) # 隐式等待 driver.get("http://192.168.1.201/mantisbt-1.2.19/login_page.php") # 获取URL,打开页面 sleep(1) # 直接等待 username_input = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[2]/td[2]/input") # 获取输入帐号框 username_input.send_keys(un) # 输入帐号 sleep(1) password_input = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[3]/td[2]/input") # 获取输入密码框 password_input.send_keys(pw) # 输入密码 sleep(1) login_button = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[6]/td/input") # 获取登陆按钮 login_button.click() # 点击登陆按钮 sleep(3) driver.quit() # 退出浏览器
上面的代码实现了将帐号密码放在一个字典内,再去调用,进行登陆操做。
(4)、csv文件
# coding:utf-8 import os # 引入os模块 import csv # 引入csv包 from time import sleep # 引入sleep方法 from selenium import webdriver # 从selenium中引入webdriver list_username = [] list_password = [] data = csv.reader(file('G:\\joker_study\\userconfig.csv', 'rb')) # 获取每列数据 for user in data: print user[0] # 获取第一列中从上往下的数据 list_username.append(user[0]) # 将每次读取的字符串加入到数组中 print user[1] # 获取第二列中从上往下的数据 list_password.append(user[1]) # 将每次读取的字符串加入到数组中 def login_mantis_by_csv(): for i in range(len(list_username)): driver = webdriver.Firefox() # 选择打开的浏览器 driver.maximize_window() # 浏览器窗口最大化 driver.implicitly_wait(3) # 隐式等待 driver.get("http://192.168.1.201/mantisbt-1.2.19/login_page.php") # 获取URL,打开页面 sleep(1) # 直接等待 username_input = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[2]/td[2]/input") # 获取输入帐号框 username_input.send_keys(str(list_username[i])) # 输入帐号 sleep(1) password_input = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[3]/td[2]/input") # 获取输入密码框 password_input.send_keys(str(list_password)) # 输入密码 sleep(1) login_button = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[6]/td/input") # 获取登陆按钮 login_button.click() # 点击登陆按钮 sleep(3) driver.quit() # 退出浏览器
上 面的代码实现了将帐号密码分别存在一个CSV表格中,经过csv.reader将每列都读取出来,user[0]第一列,user[1]第二列,一次类 推。须要注意的是,要讲CSV文件打开的格式和工具格式保持一致:在简体中文环境下,EXCEL打开的CSV文件默认是ANSI编码,若是CSV文件的编 码方式为utf-八、Unicode等编码可能就会出现文件乱码的状况。
四、关键字驱动
采用EXCEL或者QTP及robot framework等工具大部分都是以关键字驱动来实现自动化测试,这种方式因为只须要关注"我要作什么(命令)?对谁作(对象)?怎么作(值)?",目前尚未去采用这种方式去写做脚本,等学习了robot framework或者用到这种方式的时候,再记录补充下吧。
例如这种EXCEL表格(网上随意复制过来)中所示: