简单的自动化测试模型(python+selenium)

         刚接触自动化测试,由于没有编程语言的基础,是搞不懂代码里面的函数、封装、包以及其他概念,只是了解字符串、数组、元组及字典这种最基本的名词,更不懂自动化测试框架了。

         在我这种外门汉的角度来看,代码不就是一页word文件写进去,从头执行到尾吗?其实不然,代码可不止一页word,很多页啊。

        看着虫师的书籍学习自动化测试,边看边敲还是会忘记,想想还是做做笔记比较合宜。这篇笔记来粗略记下学习自动化测试的几种模型,可能再之后回来看会有特别的感受,先这样记着吧。

1、线性测试

线性测试,顾名思义,就是一条路按照一条直线走到底。它的每个脚本都是独立的,都可以拿出来单独运行,来验证一个功能点,上两段小代码举个栗子:

打开百度主页:

# 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()  # 退出相关浏览器

打开百度主页,并输入查找内容:

# 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()  # 退出相关浏览器

 以上两段代码,分别做了实现打开百度首页和打开百度首页后输入查找内容的功能,都可以单独拿出来执行。如果需要修改查找访问页面,那么我需要两段代码都需要修改。当这类独立的脚本数量多了起来,去修改这些内容花费的工作量太大,将会失去了自动化的目的。

2、模块化与类库

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()  # 调用退出模块

上面的代码实现了调用登录模块和退出模块。

通过以上代码可以发现,登录模块和退出模块可以让任意操作类脚本调用,省去了该部分代码的重复量,便于维护的同时,也加快了代码的开发速度。

3、数据驱动

直接理解成参数化输入,不同结果输出。

(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-8、Unicode等编码可能就会出现文件乱码的情况。

4、关键字驱动

 采用EXCEL或者QTP及robot framework等工具大部分都是以关键字驱动来实现自动化测试,这种方式由于只需要关注"我要做什么(命令)?对谁做(对象)?怎么做(值)?",目前还没有去采用这种方式去写作脚本,等学习了robot framework或者用到这种方式的时候,再记录补充下吧。

例如这种EXCEL表格(网上随意复制过来)中所示:

posted @ 2018-01-15 19:26  加班使我变丑智商下降  阅读(1403)  评论(0编辑  收藏  举报