关于自动化测试:WebUI自动化测试框架搭建之需求整理详细设计和框架设计

1 总体需要

1.1 实现目标

  • 基于BS架构,模仿用户(鼠标、键盘)操作,达到疾速、反复执行测试用例;
  • 便于回归测试,疾速笼罩主线用例或性能;
  • 线上或线下巡检测试,联合继续集成,及时发现运行环境存在的问题;
  • 晋升集体自动化测试技术能力,为业务提供强有力的测试伎俩。

1.2 性能需要

  • 基于Unittest,封装、调用和组织所有的测试用例,进行批量或指定用例运行;
  • 反对邮件服务,可增加任意团队成员邮箱,及时告诉团队成员自动化运行后果;
  • 反对log日志,保留运行过程所有或须要记录的数据;
  • 反对HTML测试报告,直观展现测试后果和数据;
  • 反对用例设计和测试后果拆散,便于数据管理;
  • 反对Json、conf、excel等配置文件读取,提供灵便的配置文件操作方法;
  • 反对用户登录封装,后续所有的用例登录专用一个办法;
  • 反对任意批改HTMLTestRuner,可定制测试报告模板;
  • 反对测试报告多语言(英文和中文);
  • 反对截图性能;
  • 反对Jenkins继续集成。

1.3 其余要求

  • 实用所有bs架构自动化测试;
  • 模块化设计,我的项目框架模式组织代码;
  • 公共办法封装,对立调用;
  • 数据和后果离开,清晰明了;
  • 反对邮件自定义;
  • 代码正文清晰。

1.4 实用人员

  • 有肯定测试根底的软件测试人员;
  • 有肯定的代码(Python/Java)功底;
  • 致力于学习web UI自动化测试的所有人员。

1.5 学习周期

  • 两个星期到一个月,可达到独立进行web UI自动化测试;

1.6 学习倡议

  • 倡议依照文章程序,一步一步进行学习和实际;
  • 文章是从根本的环境搭建到最终框架齐全搭建的一个过程,相对来说还是比拟具体的;
  • 文章偏差于我的项目实战,未有太多的实践介绍和名词解释,所以对0根底的人员来说,可能须要额定的工夫去补充一下常识。

2 具体设计

2.1 需要剖析

对 实现需求 进行详细分析,次要有下:

性能 阐明
应用Unittest框架 开源自动化测试框架,间接应用
批量或指定用例运行 Unittest框架可反对此性能
log日志 应用Python的logging库即可
生成HTML测试报告 应用HtmlTestRunner.py模块可实现此性能
用例设计和后果拆散 应用配置文件如excel、json等组织用例数据
反对Json、conf、excel等配置文件读取 这里先应用excel进行页面元素的驱动
用户登录封装 间接把登录性能模块化,应用Unittest框架中的setup,teardown即可
定制测试报告模板 应用HTMLTestRuner.py模块
报告多语言 应用HTMLTestRuner.py模块
截图性能 应用Selenium的save_screenshot办法

2.2 技术栈

技术 版本及阐明
Python V3.x(本文为3.7)===编程语言撑持
Selenium V3.141.0 ===UI元素、控件的辨认、定位,以及浏览器管制等
HtmlTestRunner Python3版本===生成Html测试报告
Logging Python自带===生成log日志
Xlrd V1.2.0===excel读取办法
Unittest Python自带===自动化测试框架
Smtplib Python自带===邮件服务
email Python自带===邮件服务
os Python自带===零碎模块
PyCharm Community 2020.2汉化版
操作系统 Windows10旗舰版64位
其它 后续补充

3 框架设计

3.1 框架阐明

3.2 框架执行流程

4 预期后果

4.1 测试过程log日志

4.2 测试报告html格局

4.3 测试报告邮件格局

5 特地阐明

代码根本实现,如果有好的倡议,可交换学习心得。

6 第一个WebUI自动化测试程序


在开始自动化框架搭建之前,咱们先写一个简略的自动化测试脚本,来领会一下什么是web UI自动化测试,以及元素的基本操作,为后续的框架搭建鉴定根底。


6.1 Selenium根本实践

6.1.1 Selenium装置

  • 间接关上cmd窗口,输出以下命令在线装置:
pip3 install selenium

  • 装置完后,在cmd窗口中输出以下命令,能够看到selenium曾经装置了
pip list

6.1.2 WebDriverAPI

selenium提供了很多的WebDriverAPI,能够来进行:

  • 元素的辨认、定位
  • 元素的单击、双击
  • 滚动条的拖动
  • 浏览器管制如窗口大小、后退后退、刷新、表单切换、多窗口切换、文件双传下载、cookie操作、验证码等等
  • 详情请参考以下:
    Selenium WebDriver API 学习笔记(一):元素定位
    Selenium WebDriver API 学习笔记(二):浏览器管制
    Selenium WebDriver API 学习笔记(三):浏览器管制

6.2 浏览器驱动装置

  • 要想应用selenium来操作浏览器上的元素,必须装置浏览器驱动;
  • 这个要依据具体的浏览器版本来定义;
  • 本文应用的是Chrome浏览器,版本为88.0.4324.182(正式版本) (32 位);

6.2.1 Chromedriver下载

  • 下载地址:Chrome浏览器各版本对应的驱动

6.2.2 Chromedriver装置

  • 下载下来后是一个chromedriver.exe,如果是w7零碎须要把chromedriver.exe放在chrome浏览器的装置目录,而后在零碎环境变量中退出chrome浏览器的装置目录即可;如果是w10零碎,须要chromedriver.exe放在Python的装置目录即可,如本文是:

6.3 代码设计思路

6.3.1 pycharm新建脚本

  • 关上之前创立的我的项目【Automated-UITest-demo】,在我的项目上右键,新建python文件即可,这里新建一个名为test_baidu的python文件

  • 创立完后,如下多了一个test_baidu的py文件

6.3.2 自动化需要

这里咱们做以下UI自动化测试:
1、主动关上chrome浏览器
2、输出百度网址
3、关上百度首页,输出helloworld
4、最大化浏览器窗口
5、搜寻helloworld.并回车
6、浏览器窗口大小放大为640*480
7、先进行浏览器后退,再次输出csdn进行搜寻
8、清空输出的内容
9、判断是否进入csdn官网

6.3.3 需要剖析

需要 剖析
主动关上chrome浏览器 须要用到webdriver.Chrome()
输出百度网址 用到driver.get()办法
关上百度首页,输出helloworld 用到send_keys()办法
最大化浏览器窗口 应用maximize_window()办法
搜寻helloworld.并回车 用到send_keys()办法
浏览器窗口大小放大为640*480 用到 set_window_size()办法
浏览器后退 back()办法
清空输出的内容 clear()办法
判断 driver.current_url办法来判断以后的网址
  • 以上办法具体应用,参考【1.2 WebDriverAPI】

6.3.4 元素定位

  • 以上需要曾经搞清楚了,那么接下来要进行元素定位,这里大略能够对需要再拆解下,须要哪些元素?
元素 阐明 定位形式
百度输入框 用来输出helooworld find_element_by_id
搜寻csdn后点击csdn官网 用来模仿点击进入到csdn官网 find_element_by_xpath
  • 那如何定位元素,晓得应用哪种定位形式?

A、咱们关上百度首页,而后按【F12】关上浏览器的调试模式

B、点击调试模式窗口左上角的小三角

C、鼠标挪动到百度搜寻输入框

D、点击一下即可,而后看到搜寻输入框的元素属性,即要应用的元素定位办法

6.4 代码实现

6.4.1 包/模块的引入

  • 关上方才新建的test_baidu.py文件
  • 而后输出以下内容:
from selenium import webdriver  # 引入selenium模块的webdriver
from selenium.webdriver.common.keys import Keys  # 键盘输入,所以要用到Keys  
import time  # 元素等待时间,所以引入time模块

6.4.2 关上百度

driver = webdriver.Chrome()  # 关上Chrome浏览器
driver.get("http://www.baidu.com")  # 输出百度网址

print("============验证浏览器的根本管制==========")

6.4.3 定位搜寻框输出helloworld,窗口最大化

def search():
    print("1、搜寻helloworld.并回车......")
    time.sleep(2)
    driver.find_element_by_id("kw").send_keys("helloworld")  # 输出“helloworld”
    time.sleep(2)
    driver.find_element_by_id("kw").send_keys(Keys.ENTER)  # 回车进行搜寻
    time.sleep(2)
    driver.maximize_window()  # 最大化以后窗口

6.4.4 窗口放大为640*480

def windows_size():
    print("2、浏览器窗口大小放大为640*480......")
    time.sleep(2)
    driver.set_window_size(640, 480)  # 管制浏览器显示尺寸为640*480
    time.sleep(0.5)
    driver.maximize_window()  # 最大化以后窗口
    time.sleep(2)

6.4.5 窗口刷新

ef back_refresh():
    print("3、先进行浏览器后退,再次输出csdn进行搜寻")
    driver.back()
    driver.find_element_by_id("kw").send_keys("csdn")  # 输出csdn
    time.sleep(1)
    driver.refresh() # 刷新

6.4.6 清空输出内容

def serach_clear():
    print("4、清空输出的内容......")
    driver.find_element_by_id("kw").send_keys("csdn")  # 输出csdn
    time.sleep(2)
    driver.find_element_by_id("kw").clear()
    time.sleep(0.5)

6.4.7 进入csdn官网并判断

def csdn():
    print("5、进入csdn官网")
    driver.find_element_by_id("kw").send_keys("csdn")  # 输出csdn
    time.sleep(2)
    driver.find_element_by_id("kw").send_keys(Keys.ENTER)  # 回车进行搜寻
    time.sleep(2)
    driver.find_element_by_xpath("//*[@id='1']/h3/a[1]").click()
    time.sleep(2)
    windows = driver.window_handles
    driver.switch_to.window(windows[-1])
    now_url = driver.current_url
    m_get_url = "https://www.csdn.net/"
    if now_url == m_get_url:
        print("通过判断,曾经进入csdn官网!!")
    else:
        print("未进入到csdn官网,请查看代码!")

6.4.8 调用办法

search()
windows_size()
back_refresh()
serach_clear()
csdn()

driver.quit()  # 敞开浏览器

6.5 残缺源码

# 作者:Administrator
# 日期:2021/2/24 15:15
# 文件名称:test_baidu.py
# Function:关上百度网主页,在搜寻栏输出“helloworld”

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Chrome()  # 关上Chrome浏览器
driver.get("http://www.baidu.com")  # 输出百度网址

print("============验证浏览器的根本管制==========")

def search():
    print("1、搜寻helloworld.并回车......")
    time.sleep(2)
    driver.find_element_by_id("kw").send_keys("helloworld")  # 输出“helloworld”
    time.sleep(2)
    driver.find_element_by_id("kw").send_keys(Keys.ENTER)  # 回车进行搜寻
    time.sleep(2)
    driver.maximize_window()  # 最大化以后窗口


def windows_size():
    print("2、浏览器窗口大小放大为640*480......")
    time.sleep(2)
    driver.set_window_size(640, 480)  # 管制浏览器显示尺寸为640*480
    time.sleep(0.5)
    driver.maximize_window()  # 最大化以后窗口
    time.sleep(2)

def back_refresh():
    print("3、先进行浏览器后退,再次输出csdn进行搜寻")
    driver.back()
    driver.find_element_by_id("kw").send_keys("csdn")  # 输出csdn
    time.sleep(1)
    driver.refresh() # 刷新

def serach_clear():
    print("4、清空输出的内容......")
    driver.find_element_by_id("kw").send_keys("csdn")  # 输出csdn
    time.sleep(2)
    driver.find_element_by_id("kw").clear()
    time.sleep(0.5)

def csdn():
    print("5、进入csdn官网")
    driver.find_element_by_id("kw").send_keys("csdn")  # 输出csdn
    time.sleep(2)
    driver.find_element_by_id("kw").send_keys(Keys.ENTER)  # 回车进行搜寻
    time.sleep(2)
    driver.find_element_by_xpath("//*[@id='1']/h3/a[1]").click()
    time.sleep(2)
    windows = driver.window_handles
    driver.switch_to.window(windows[-1])
    now_url = driver.current_url
    m_get_url = "https://www.csdn.net/"
    if now_url == m_get_url:
        print("通过判断,曾经进入csdn官网!!")
    else:
        print("未进入到csdn官网,请查看代码!")

search()
windows_size()
back_refresh()
serach_clear()
csdn()

driver.quit()  # 敞开浏览器

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理