WebUI自动化测试框架搭建之需求整理、详细设计、框架设计

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 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下载

在这里插入图片描述

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()  # 关闭浏览器
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
4天前
|
设计模式 前端开发 JavaScript
自动化测试框架设计原则与最佳实践####
本文深入探讨了构建高效、可维护的自动化测试框架的核心原则与策略,旨在为软件测试工程师提供一套系统性的方法指南。通过分析常见误区,结合行业案例,阐述了如何根据项目特性定制自动化策略,优化测试流程,提升测试覆盖率与执行效率。 ####
21 6
|
4天前
|
人工智能 前端开发 测试技术
探索软件测试中的自动化框架选择与优化策略####
本文深入剖析了当前主流的自动化测试框架,通过对比分析各自的优势、局限性及适用场景,为读者提供了一套系统性的选择与优化指南。文章首先概述了自动化测试的重要性及其在软件开发生命周期中的位置,接着逐一探讨了Selenium、Appium、Cypress等热门框架的特点,并通过实际案例展示了如何根据项目需求灵活选用与配置框架,以提升测试效率和质量。最后,文章还分享了若干最佳实践和未来趋势预测,旨在帮助测试工程师更好地应对复杂多变的测试环境。 ####
19 4
|
9天前
|
机器学习/深度学习 前端开发 测试技术
探索软件测试中的自动化测试框架选择与优化策略####
本文深入探讨了在当前软件开发生命周期中,自动化测试框架的选择对于提升测试效率、保障产品质量的重要性。通过分析市场上主流的自动化测试工具,如Selenium、Appium、Jest等,结合具体项目需求,提出了一套系统化的选型与优化策略。文章首先概述了自动化测试的基本原理及其在现代软件开发中的角色变迁,随后详细对比了各主流框架的功能特点、适用场景及优缺点,最后基于实际案例,阐述了如何根据项目特性量身定制自动化测试解决方案,并给出了持续集成/持续部署(CI/CD)环境下的最佳实践建议。 --- ####
|
10天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
46 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
9天前
|
测试技术 API Android开发
探索软件测试中的自动化框架选择与实践####
本文深入探讨了软件测试领域内,面对众多自动化测试框架时,如何依据项目特性和团队需求做出明智选择,并分享了实践中的有效策略与技巧。不同于传统摘要的概述方式,本文将直接以一段实践指南的形式,简述在选择自动化测试框架时应考虑的核心要素及推荐路径,旨在为读者提供即时可用的参考。 ####
|
11天前
|
机器学习/深度学习 自然语言处理 物联网
探索自动化测试框架的演变与未来趋势
随着软件开发行业的蓬勃发展,软件测试作为保障软件质量的重要环节,其方法和工具也在不断进化。本文将深入探讨自动化测试框架从诞生至今的发展历程,分析当前主流框架的特点和应用场景,并预测未来的发展趋势,为软件开发团队选择合适的自动化测试解决方案提供参考。
|
1月前
|
机器学习/深度学习 人工智能 运维
构建高效运维体系:从自动化到智能化的演进
本文探讨了如何通过自动化和智能化手段,提升IT运维效率与质量。首先介绍了自动化在简化操作、减少错误中的作用;然后阐述了智能化技术如AI在预测故障、优化资源中的应用;最后讨论了如何构建一个既自动化又智能的运维体系,以实现高效、稳定和安全的IT环境。
65 4
|
1月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
52 4
|
5天前
|
机器学习/深度学习 数据采集 人工智能
智能运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的兴起背景、核心组件及其在现代IT运维中的应用。通过对比传统运维模式,阐述了AIOps如何利用机器学习、大数据分析等技术,实现故障预测、根因分析、自动化修复等功能,从而提升系统稳定性和运维效率。文章还深入分析了实施AIOps面临的挑战与解决方案,并展望了其未来发展趋势。 ####
|
14天前
|
机器学习/深度学习 数据采集 运维
智能化运维:机器学习在故障预测和自动化响应中的应用
智能化运维:机器学习在故障预测和自动化响应中的应用
41 4