WebUI⾃动化测试⽅案(超级⼲货)看完不会你我
项⽬讨论
⼀、项⽬中符合⾃动化测试的部分有哪些?(⽬标和范围 scope,准⼊准出标准)
1、稳定的需求点、变动较少的页⾯
2、每⽇构建后的测试验证 daily build
3、⽐较频繁的回归测试
4、需要在多平台上运⾏的相同测试案例、组合遍历型的测试、⼤量的重复任务
⼆、⾃动化⽤例在整个项⽬的测试⽤例的覆盖率
1、⼀般的要求 50% +
2、重点的要求 80% +
3、根据项⽬的具体要求,变动特别⼤的项⽬需要额外单独考虑覆盖率
本⽂纯⼲货,⾃备饮料,免得把⾃⼰[噎住] ( *⊙~⊙)
团队建设
建⽴⾃动化测试的组,理想状态下有4个⼈员,测试开发、中⾼级⾃动化测试⼯程师、2个初级⾃动化⼯程师;⾮理想的情况下,可能只有⼀个⼈。
测试开发:
基础答案:⾃动化框架的建设,确定⾃动化框架的设计模式、第三⽅代码⼯具的封装、中间公共模块的设计和调⽤、测试⽤例、测试套件的管理和执⾏、测试报告和测试结果的输出(⽂件输出和邮件通知)
可选⾼级:如果可能的话,需要搭建持续集成服务器(CI,Continuous Integration Server)的环境,进⾏持续交付和⾃动化的冒烟测试等。培训的任务,需要将设计的框架以及封装的驱动,对其他成员进⾏培训。
有⾃动化⽅案的实施经验、有开发背景、以及持续集成的背景等。
中⾼级⾃动化测试⼯程师:
配合测试开发⼈员,实施测试框架的建设。主要负责中间公共模块的实现和实例化等,以及部分⾼难度和流程复杂的⾃动化⽤例脚本编写和调试等⼯作。
有参与过⾃动化⽅案的建设、脚本编写经验丰富、会代码调试、懂Web测试等。
初级⾃动化测试⼯程师:
根据中间公共模块的设计,进⾏实例化公共模块、⽅法组合,实现⾃动化⽤例脚本的编写。
有计算机编程思维、有代码经验、可以读懂脚本和HTML等。
若只有我⼀个⼈:
⾸先实现⾃动化⽤例的维护和执⾏。在这个基础上不断的抽取实现公共模块的设计以及测试报告的⽣成等⼯作。通过经验的积累,以及后续⼈员的补充,早⽇做好⾃动化框架的建设⼯作。
技术⽅案
Selenium WebDriver、Python(unittest) Java(JUnit)、CI Server
技术⽅案:
选择Python + Selenium 的技术⽅案。
⾸先技术⼯具是免费的,Python的⼯具⽤PyCharm社区版,Selenium的WebDriver是开源⼯具。利⽤⽐较简洁的Python语⾔进⾏⾃动化测试,对于⼈员的学习成本来讲⽐较实⽤,学习时间短,有优势。
另外Python⾃带的unittest单元测试框架可以很⽅便的实现⾃动化⽤例的设计和执⾏以及⾃动化⽤例套件的管理等任务。Python是纯⾯向对象的语⾔,后续也可以过渡到Java + Selenium进⾏更加丰富的⾃动化测试。
constant什么意思中文意思此外,可以选择Jenkins作为持续集成服务器,配合Python+Selenium的⽅案进⾏⾃动化冒烟测试。
源代码管理⼯具(VCS, version control system)
选择SVN(git)作为代码的源代码管理⼯具。集成在PyCharm中的步骤如下
1、把代码放到SVN在本地签出(check out)的⽂件夹⽬录中,例如 D:\SVN\XXProject\Trunck
2、⽤PyCharm打开刚刚部署的代码
3、选择PyCharm的 VCS|Enable VCS integration,选择 Subversion(svn)或者 Git
4、右键项⽬⽂件的根⽬录,选择 Subversion | add to VCS
5、右键项⽬⽂件的根⽬录,或者选 VCS |
6、每天打开代码后,⾸先 Subversion | update project
硬件:
硬件的要求不⾼,主要需要独⽴的测试环境。另外测试⼈员⽤的电脑最好是Windows桌⾯操作系统,需要安装Firefox浏览器,避免47.0的最新版本。测试⼈员最好也使⽤Chrome浏览器辅助进⾏Web元素的定位。
Selenium 学习总结
Selenium IDE (⽕狐的插件)
1、Selenium IDE
⼀个基于⽕狐浏览器的插件
2、录制(需要确保右上⾓的录制按钮是按下去的),为了我们熟悉Selenium WebDriver/ RC
3、保存和另存为测试⽤例
4、⽆论是否保存⽤例,都可以直接回放
5、导出测试⽤例的对应的编程脚本
6、C# Nunit WebDriver
7、Java Junit / testNG WebDriver
8、Python unittest WebDriver
python基础知识测试
9、Ruby Test::Unit WebDriver
10、插⼊、编辑、删除命令
11、学习Selenium的WebDriver/ RC
Python + Selenium WebDriver
⼀、搭建环境步骤
a 安装 python3.x (windows xp 不⽀持 python3.5+)
b 设置环境变量 path(安装时候也可以解决勾上 to path)
c 安装Selenium ⽤pip命令安装 pip install -U selenium
有⽆问题?
路径,pip可能定位不到,pip也可能定位到别的⽂件夹(perl)
⽅案:cd c:\python34\scripts
外⽹ip问题。交换机的原因,局域⽹⾥⾯是同⼀个ip,造成安装超时
⽕狐的版本 46.0以及以下
windows 7 x64以上的系统,需要⽤管理员模式运⾏cmd,否则会安装失败。
普通的使⽤
⼆、定位⽅式
by id, name, class_name, tag_name, css_selector, xpath, link_text, partial_link_text
主要⽤的是 id,name, css_selector, xpath, link_text
Selenium 基本使⽤
Python + Selenium 环境搭建
安装Python,3.x(3.4 3.5 3.6)
注意:环境变量path
需要添加 "C:\Python34;C:\Python34\Scripts;"到Path
步骤:
右键我的电脑属性 | ⾼级系统设置 | 环境变量
系统变量 | Path 并双击 | Ctrl+C | 编辑 | Ctrl+V
安装 Selenium
cmd | pip install -U selenium
-U = --upgrade 升级安装
类似于linux命令
command -x param
容易出现的问题
1、环境变量
cd C:\Python34\Scripts
再安装
2、管理员权限
右键管理员⽅式运⾏
WebDriver的基本使⽤
1、实例化⼀个WebDriver的对象(使⽤默认的⽕狐浏览器 v46或者以下)
driver = webdriver.Firefox()
3、查元素
⽤id : driver.find_element_by_id("account")
⽤name: driver.find_element_by_name("password")
⽤xpath css_selector
4、对元素的操作
clear()
click()
send_keys()
使⽤python的休眠,给浏览器留出时间加载页⾯
sleep(2)
5、关闭退出⽕狐
driver.quit()
selenium WebDriver的进阶操作
unittest 单元测试框架的使⽤
验证:断⾔ self.assertEqual(expected, actual, msg)
管理测试⽤例:每⼀个以 test_ 开头的⽅法
可以在⾃动化测试⽤例中忽略的部分:
编号名称优先级模块(项⽬) ## 忽略
必须在⾃动化⽤例中强调的部分:
前置条件    setUp()
输⼊数据
步骤      test_ 开头的⽅法
预期结果  test_ 开头的⽅法
清理      tearDown()
新增的⼀个知识点: 测试的初始化以及测试的结束
setUpClass() 和 tearDownClass()
注意上述⽅法与 setUp() 和 tearDown() 的调⽤顺序
1、定位⽅式的使⽤
css_selector
⽅法调⽤:
driver.find_element_by_css_selector("#langs > button")
CSS的3种选择器:
1、id: 使⽤#+id
2、tag: 使⽤tag
3、class: 使⽤.+class
CSS selector的获取
可以使⽤开发者⼯具,定位的元素,右键 | 复制 selector(复制CSS路径)
1、Chrome使⽤了相对路径 #langs > button
2、Firefox(firebug)使⽤了绝对路径 html.screen-desktop-wide.device-desktop body.ainer div#login div.panel-head div.panel-actions div#langs.dropdown.open button.btn
class_name
通过 class定位元素,必须保持 class唯⼀,否则定位会失败
driver.find_element_by_class_name("btn")
link_text 和 partial_link_text
⽂字选择正确就⾏了
xpath
chrome内核的开发者⼯具,复制的是相对的xpath
firefox内核的开发者⼯具(firebug),复制的绝对的xpath
特定的元素的处理
frame
<iframe>
<html>
<head></head>
<body>
<;我们需要定位的元素>
</body>
</html>科技园php
</iframe>
上述代码中,我们需要定位的元素,处于⼀个frame中:我们需要先切换到对应的frame中,然之操作,之后再退出  # 我们需要先切换到对应的frame中
## 切换frame
driver.switch_to.frame("frame_name")
## 或者⽤保险的办法切换frame
frame_element = driver.find_element_by_css_selector("#frame_id")
driver.switch_to.frame(frame_element)
## 开始做定位操作
## <----------------->
## 结束做定位操作
## 切换frame必须成对的出现。
## 退出切换的frame到默认的⽹页html中
driver.switch_to.default_content()
select
js中continue用法select定位有个前提,元素标签必须是 select
<select>
</select>
1
2
3
4
5
## 部门是个 select 元素  <select></select>
## 需要3步骤:
##    1. 到 select 的元素,赋值给变量 dept_select
##    2. 实例化 dept_select 为 Select()的对象为 user_adding_dept
##    3. 调⽤ user_adding_dept 的⽅法 select_by_index()给元素赋值
⽰例代码 
# 到 select 的元素,赋值给变量 dept_select
dept_select = driver.find_element_by_id("dept")
# 实例化 dept_select 为 Select()的对象为 user_adding_dept
user_adding_dept = Select(dept_select)
# 调⽤ user_adding_dept 的⽅法 select_by_index()给元素赋值
user_adding_dept.select_by_index(2)
清除 cookie
在打开浏览器的时候,需要清理cookie。
from selenium import webdriver
driver = webdriver.Firefox()
driver.delete_all_cookies()
<("...")
数据驱动的⽅式编写⽤例
主要有两种形式进⾏数据驱动
数据驱动:⽤外部数据来驱动测试⽤例的执⾏
数据库驱动:MySQL、Oracle、PostgreSQL、SQL Server
import pymysql
connect = t(host="xx", port=3306, user="root", passwd="xxx", db="xx")
cur = connect.cursor()
mysql_data = cur.fetchall()
for row in mysql_data:
# 进⾏测试
# 使⽤字典类型
data_to_test = {
"key1": row[0],
"key2": row[1]功能测试简历
}
cur.close()
connect.close()
数据⽂件驱动:csv⽂件最典型、xml⽂件、txt⽂件
import csv
csv_file = open("xxx.csv", "r", encoding="utf8")
csv_data = ader(csv_file)
for row in csv_data:
# 进⾏测试
# 使⽤字典类型
data_to_test = {
"key1": row[0],
"key2": row[1]
}
csv_file.close()
需要掌握的知识点:
1、python的字典类型 dict 类型
2、python的读写⽂件
3、python的读写数据库
4、for循环
5、注意资源的释放
关闭数据库游标和连接
关闭⽂件
模块化的⽅式编写⽤例
需要将每个⽤例都需要⽤的公共的功能,抽取出来,放到⼀个公共类中,作为模块化
创建⼀个Python Package "common",在⾥⾯创建⼀个ranzhi_common.py⽂件,⾥⾯添加RanzhiCommon 类
1、login() : 普通登录,默认⽤admin/123456登录
2、logout():退出系统
3、login_by_dict(user_to_login):使⽤字典类型的参数进⾏登录,user_to_login 是⼀个字典类型 dict
4、change_language(lang):zh_CN, en_US, zh_TW 切换语⾔,需要参数传递要切换的语⾔
5、select_app(app):crm, admin, oa, cash, team 选择App,需要传递选择后台管理 | 客户管理。。。
6、select_menu_for_admin(menu): organization 选择了后台管理以后,选择菜单组织
7、add_user(user_to_add): 使⽤字典类型的参数进⾏添加
创建测试⽤例的类,⽐如 ranzhi_test_01.py ranzhi_test_02.py ranzhi_test_ 在这些类中调⽤上⾯创建的类,⼀般会放到setUp() 中
import unittest
from common.ranzhi_common import RanzhiCommon
class RanzhiTest01(unittest.TestCase):
def setUp(self):
ranzhi_common = RanzhiCommon()
def test_xxx(self):
ranzhi_common.login()
数据库设计的三个阶段##...

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。