自动化脚本开发

线性脚本

线性脚本:脚本能顺序地执行一个业务,代码的可维护性、复用性较差,维护成本高

需求1:通过线性测试把业务场景实现
    1、打开verydows电商系统的首页:http://47.105.47.131/verydows/
    2、点击其中的免费注册按钮(验证注册跳转功能)
    3、输入正常的用户名
    4、输入正常的邮箱
    5、输入正常的密码
    6、输入正常的确认密码
    7、勾选协议
    8、点击注册按钮(验证是否能注册成功)

veryRegTrue .py

from selenium import webdriver
import time
driver = webdriver.Chrome()
#1、打开verydows电商系统的首页:http://47.105.47.131/verydows/
driver.get("http://47.105.47.131/verydows/")
#写一句隐形等待
driver.implicitly_wait(10)
#2、点击其中的免费注册按钮(验证注册跳转功能)
driver.find_element_by_link_text("免费注册").click()
#需要对免费注册的跳转功能进行验证,怎么验证?
#通过跳转页面的URL地址断言
expectURL = 'http://47.105.47.131/verydows/index.php?c=user&a=register'
actualURL = driver.current_url
if expectURL==actualURL:
    print("跳转正确,免费注册跳转功能成功") 
else:
    print("跳转失败,免费注册跳转功能失败")
# 3、输入正常的用户名
driver.find_element_by_id('username').send_keys("sz1902_002")
# 4、输入正常的邮箱
driver.find_element_by_id('email').send_keys('sz1902_002@qq.com')
# 5、输入正常的密码
driver.find_element_by_id('password').send_keys('123456')
# 6、输入正常的确认密码
driver.find_element_by_id('repassword').send_keys('123456')
#7、勾选协议
#8、点击注册按钮(验证是否能注册成功)
driver.find_element_by_link_text("立即注册").click()
#延时5秒钟,让其跳过中间页面,能正显示出用户信息页面
time.sleep(5)
expectRegURL = 'http://47.105.47.131/verydows/index.php?c=user&a=index'
actualRegURL = driver.current_url

#断言注册是否成功
if expectRegURL==actualRegURL:
    print("跳转到用户信息页面,注册成功,正向注册测试用例通过")
else:
    print("未能跳转到用户信息页面,注册失败,正向注册测试用例失败")

#关闭浏览器对象
driver.quit()
需求2:通过线性测试实现登录业务场景
    1、打开verydows电商系统的首页:http://47.105.47.131/verydows/
    2、点击其中的登陆按钮(验证登陆按钮跳转功能)
    3、输入正常的用户名
    4、输入正常的密码
    5、点击登陆( 验证是否能登陆成功)

veryLoginTrue .py

from selenium import webdriver
import time
driver = webdriver.Chrome()
#1、打开verydows电商系统的首页:http://47.105.47.131/verydows/
driver.get("http://47.105.47.131/verydows/")
#写一句隐形等待
driver.implicitly_wait(10)
# 2、点击其中的登陆按钮
driver.find_element_by_link_text('登陆').click()
#(验证登陆按钮跳转功能)
expectUrl = 'http://47.105.47.131/verydows/index.php?c=user&a=login'
actualUrl = driver.current_url
if expectUrl==actualUrl:
    print("跳转成功")
else:
    print("跳转失败")
# 3、输入正常的用户名(已经注册成功的用户名-->sz1902_002)
driver.find_element_by_id('username').send_keys('sz1902_002')
# 4、输入正常的密码(与登陆用户名一致的密码)
driver.find_element_by_id('password').send_keys('123456')
# 5、点击登陆
driver.find_element_by_xpath('//*[@id="login-form"]/div/a').click()
#再点击登陆之后需要等待5秒,跳过中间界面
time.sleep(5)
#( 验证是否能登陆成功)
expectLoginUrl = 'http://47.105.47.131/verydows/index.php?c=user&a=index'
actualLoginUrl = driver.current_url
if expectLoginUrl==actualLoginUrl:
    print("跳转登陆成功页面,正向的登录用例通过")
else:
    print("未能跳转登陆成功页面,正向的登录用例失败")

driver.quit()

模块化驱动测试

模块化驱动测试:主要脚本的可维护性角度进行改进,把重复的操作独立成公共模块,即把脚本中重复性的代码提取出来,写入公共模块(方法、类里面实现),当用例执行过程中需要用到这一模块时则被调用
最大限度的消除了重复,提高了测试用例的可维护、复用性。

需求1:将登录、退出功能整理在一个模块中,并且分别设计为方法,供其他模块调用

LoginModel .py

from selenium import webdriver
import time
#登录系统的方法
def verylogin(driver):
    #1、打开verydows电商系统的首页:http://47.105.47.131/verydows/
    driver.get("http://47.105.47.131/verydows/")
    #写一句隐形等待
    driver.implicitly_wait(10)
    # 2、点击其中的登陆按钮
    driver.find_element_by_link_text('登陆').click()
    #(验证登陆按钮跳转功能)
    expectUrl = 'http://47.105.47.131/verydows/index.php?c=user&a=login'
    actualUrl = driver.current_url
    if expectUrl==actualUrl:
        print("跳转成功")
    else:
        print("跳转失败")
    # 3、输入正常的用户名(已经注册成功的用户名-->sz1902_002)
    driver.find_element_by_id('username').send_keys('sz1902_002')
    # 4、输入正常的密码(与登陆用户名一致的密码)
    driver.find_element_by_id('password').send_keys('123456')
    # 5、点击登陆
    driver.find_element_by_xpath('//*[@id="login-form"]/div/a').click()
    #再点击登陆之后需要等待5秒,跳过中间界面
    time.sleep(5)
    #( 验证是否能登陆成功)
    expectLoginUrl = 'http://47.105.47.131/verydows/index.php?c=user&a=index'
    actualLoginUrl = driver.current_url
    if expectLoginUrl==actualLoginUrl:
        print("跳转登陆成功页面,正向的登录用例通过")
    else:
        print("未能跳转登陆成功页面,正向的登录用例失败")

#退出登陆的 方法
def veryLogout(driver):
    driver.find_element_by_xpath('//*[@id="top-userbar"]/a').click()
    driver.find_element_by_link_text('退出').click()

#关闭浏览器的方法
def veryquit(driver):
    driver.quit()

而这种功能的模块,可以独立放在一个Public文件夹下,供其他模块调用
在这里插入图片描述

maintest .py

from selenium import webdriver
import time
import os
import sys  # 将公共模块导入系统路径列表
path1 = os.path.dirname(__file__)
path2 = os.path.dirname(path1)+r'/public'
path = sys.path
path.append(path2)

import Loginmodel
driver = webdriver.Chrome()
Loginmodel.verylogin(driver)
#xxxxxxxxx
Loginmodel.veryLogout(driver)
Loginmodel.veryquit(driver)

数据驱动测试

数据驱动测试:通过数据的改变来驱动自动化测试的执行,解决代码的复用性问题(一个脚本通过数据驱动就可以覆盖多个手动测试用例),其实就是参数化技术

  • 列表中存列表
  • 列表中存字典
  • csv文件存储数据
需求1:使用列表的方式参数化用户名,通过线性测试把业务场景实现
    1、打开verydows电商系统的首页:http://47.105.47.131/verydows/
    2、点击其中的免费注册按钮(验证注册跳转功能)
    3、输入正常的用户名(一次跑三条用例)
    4、输入正常的邮箱
    5、输入正常的密码
    6、输入正常的确认密码
    7、勾选协议
    8、点击注册按钮(验证是否能注册成功)

veryRegTruePara .py

from selenium import webdriver
import time



data = [['sz1902_003','sz1902_003@qq.com'],
        ['sz1902_004','sz1902_004@qq.com'],
        ['sz1902_005','sz1902_005@qq.com']]
for item in data:
    driver = webdriver.Chrome()
    #1、打开verydows电商系统的首页:http://47.105.47.131/verydows/
    driver.get("http://47.105.47.131/verydows/")
    #写一句隐形等待
    driver.implicitly_wait(10)
    #2、点击其中的免费注册按钮(验证注册跳转功能)
    driver.find_element_by_link_text("免费注册").click()
    # 3、输入正常的用户名
    driver.find_element_by_id('username').send_keys(item[0])
    # 4、输入正常的邮箱
    driver.find_element_by_id('email').send_keys(item[1])
    # 5、输入正常的密码
    driver.find_element_by_id('password').send_keys('123456')
    # 6、输入正常的确认密码
    driver.find_element_by_id('repassword').send_keys('123456')
    #7、勾选协议
    #8、点击注册按钮(验证是否能注册成功)
    driver.find_element_by_link_text("立即注册").click()
    #延时5秒钟,让其跳过中间页面,能正显示出用户信息页面
    time.sleep(5)
    expectRegURL = 'http://47.105.47.131/verydows/index.php?c=user&a=index'
    actualRegURL = driver.current_url

    #断言注册是否成功
    if expectRegURL==actualRegURL:
        print("跳转到用户信息页面,注册成功,正向注册测试用例通过")
    else:
        print("未能跳转到用户信息页面,注册失败,正向注册测试用例失败")

    #关闭浏览器对象
    driver.quit()
需求2:通过字典的方式参数化用户名反向测试用例(不能包括重复注册情况,要单独再写脚本)
    1、打开verydows电商系统的首页:http://47.105.47.131/verydows/
    2、点击其中的免费注册按钮
    3、输入异常的用户名(一次跑五条用例)
            空-->请设置用户名
            abcd-->用户名不符合格式要求
            abcdabcdabcda-->用户名不符合格式要求
            12abcd->用户名不符合格式要求
            sfd#$12-->用户名不符合格式要求
    4、输入正常的邮箱:sz1902_000@qq.com
    5、输入正常的密码:123456
    6、输入正常的确认密码:123456
    7、勾选协议
    8、点击注册按钮(验证是否能注册成功)

veryUserLoginFalse1 .py

from selenium import webdriver
import time

data=[{'username':'','email':'sz1902_000@qq.com','pw':'123456','expect':'请设置用户名'},
    {'username':'abcd','email':'sz1902_000@qq.com','pw':'123456','expect':'用户名不符合格式要求'},
    {'username':'abcdabcdabcdabcda','email':'sz1902_000@qq.com','pw':'123456','expect':'用户名不符合格式要求'},
    {'username':'12abcd','email':'sz1902_000@qq.com','pw':'123456','expect':'用户名不符合格式要求'},
    {'username':'sfd#$12','email':'sz1902_000@qq.com','pw':'123456','expect':'用户名不符合格式要求'}]
for item in data:
    driver = webdriver.Chrome()
    #1、打开verydows电商系统的首页:http://47.105.47.131/verydows/
    driver.get("http://47.105.47.131/verydows/")
    #写一句隐形等待
    driver.implicitly_wait(10)
    #2、点击其中的免费注册按钮(验证注册跳转功能)
    driver.find_element_by_link_text("免费注册").click()
    # 3、输入正常的用户名
    driver.find_element_by_id('username').send_keys(item['username'])
    # 4、输入正常的邮箱
    driver.find_element_by_id('email').send_keys(item['email'])
    # 5、输入正常的密码
    driver.find_element_by_id('password').send_keys(item['pw'])
    # 6、输入正常的确认密码
    driver.find_element_by_id('repassword').send_keys(item['pw'])
    #7、勾选协议
    #8、点击注册按钮(验证是否能注册成功)
    driver.find_element_by_link_text("立即注册").click()
    #延时5秒钟,让其跳过中间页面,能正显示出用户信息页面
    time.sleep(5)
    expect = driver.find_element_by_xpath('//*[@id="register-form"]/div/dl[1]/dd/span/font').text
    #//*[@id="register-form"]/div/dl[1]/dd/span/font
    actual = item['expect']

    #断言注册是否成功
    if expect==actual:
        print("提示信息正确,反向注册测试用例通过")
    else:
        print("提示信息不正确,反向注册测试用例失败")

    #关闭浏览器对象
    driver.quit()
需求3:通过读取csv文件的方式参数化用户名反向测试用例(不能包括重复注册情况,要单独再写脚本)
    1、打开verydows电商系统的首页:http://47.105.47.131/verydows/
    2、点击其中的免费注册按钮
    3、输入异常的用户名(一次跑五条用例)
            空-->请设置用户名
            abcd-->用户名不符合格式要求
            abcdabcdabcda-->用户名不符合格式要求
            12abcd->用户名不符合格式要求
            sfd#$12-->用户名不符合格式要求
    4、输入正常的邮箱:sz1902_000@qq.com
    5、输入正常的密码:123456
    6、输入正常的确认密码:123456
    7、勾选协议
    8、点击注册按钮(验证是否能注册成功)

在这里插入图片描述
在这里插入图片描述

veryUserLoginFalse2 .py

from selenium import webdriver
import time
import os
import csv
#path = os.path.dirname(__file__)+r"/users.csv"]
path = os.path.dirname(os.path.dirname(__file__))+r'/test_data/users.csv'
with open(path,'r') as f:
    data = csv.reader(f)
    for item in data:
        driver = webdriver.Chrome()
        #1、打开verydows电商系统的首页:http://47.105.47.131/verydows/
        driver.get("http://47.105.47.131/verydows/")
        #写一句隐形等待
        driver.implicitly_wait(10)
        #2、点击其中的免费注册按钮(验证注册跳转功能)
        driver.find_element_by_link_text("免费注册").click()
        # 3、输入正常的用户名
        driver.find_element_by_id('username').send_keys(item[0])
        # 4、输入正常的邮箱
        driver.find_element_by_id('email').send_keys(item[1])
        # 5、输入正常的密码
        driver.find_element_by_id('password').send_keys(item[2])
        # 6、输入正常的确认密码
        driver.find_element_by_id('repassword').send_keys(item[3])
        #7、勾选协议
        #8、点击注册按钮(验证是否能注册成功)
        driver.find_element_by_link_text("立即注册").click()
        #延时5秒钟,让其跳过中间页面,能正显示出用户信息页面
        time.sleep(5)
        expect = driver.find_element_by_xpath('//*[@id="register-form"]/div/dl[1]/dd/span/font').text
        #//*[@id="register-form"]/div/dl[1]/dd/span/font
        actual = item[4]

        #断言注册是否成功
        if expect==actual:
            print("提示信息正确,反向注册测试用例通过")
        else:
            print("提示信息不正确,反向注册测试用例失败")

        #关闭浏览器对象
        driver.quit()

关键字驱动

关键字驱动:通过“关键字”的改变引起测试结果的改变,市面上的关键字驱动工具有UTF(关键字视图及专家视图),Selenium IDE、Katalon Recoder等,提供给用户独立的图形用户界面,降低脚本的编写难度

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值