目标
1.掌握使用Selenium实现批量企业级执行测试用例
2.熟悉自动化测试的流程
3.能够对Web项目和APP项目实现自动化测试
4、掌握如何在Jenkins中配置并运行测试脚本 - 持续集成 CI (Continuous integration) / CD
项目实施
要实现的业务:1、app下单流程 2、web发货业务
实现技术:python+appium+selenium + unittest
结构实现:po模式 +日志+数据驱动+报告
执行方式:持续集成
自动化测试流程 - 熟悉
1、需求分析
2、挑选适合做自动化测试的功能
3、设计测试用例
4、搭建测试环境 【可选】
5、设计自动化测试项目的架构 【可选】
6、编写代码
7、执行测试用例
8、生成测试报告并分析结果
编写自动化测试用例的原则:
- 自动化测试用例一般只实现核心业务流程或者重复执行率较高的功能
- 自动化测试用例的选择一般以“正向”逻辑的验证为主
- 不是所有手工用例都可以使用自动化测试用例来执行
- 尽量减少多个脚本之间的依赖
- 自动化测试用例执行完毕之后,一般需要回归原点
项目实施UI自动化测试的时机: 一般情况下在手工测试完成之后 版本或项目功能趋于稳定
项目需要实施UI自动化测试需要满足以下前置条件:
- 项目需要回归测试 (甲⽅⾃营项⽬、⾦融、电商)
- 项目需要实现自动化的功能模块需求变更不频繁 :稳定的模块
- 项目周期要长:(甲⽅⾃营项⽬、6个⽉以上的外包)
项目依赖包
1、安装Selenium 包
2、安装 Appium-Python-Client 包
3、移动端自动化环境搭建
4、安装 parameterized 参数化
5、安装 HTMLTestReport 生成测试报告
结构搭建
1、新建项目
项目名称:uiAutoTestTpshop
2、创建目录结构
base:所有page页面公共方法
data:测试数据存储文件
img:存放截图图片文件
log:日志
page:页面对象
report:测试报告
script:测试脚本
config.py:配置文件
run_suite.py:运行套件
utils.py:工具类
3、实现config.py 配置文件
import os
# web后台url
HOST = 'http://hmshop-test.itheima.net/index.php/Admin/Admin/login'
# 项目路径
DIR_PATH = os.path.dirname(__file__)
print(DIR_PATH)
4、实现base.py文件
import os
import time
from selenium.webdriver.support.wait import WebDriverWait
from config import DIR_PATH
class Base:
# 初始化方法
def __init__(self, driver):
self.driver = driver
# 查找元素方法
def base_find(self, loc, timeout=10, poll_frequency=0.5):
return WebDriverWait(self.driver, timeout, poll_frequency).until(lambda x: x.find_element(*loc))
# 点击方法
def base_click(self, loc):
self.base_find(loc).click()
# 输入方法
def base_input(self, loc, value):
# 获取元素
el = self.base_find(loc)
# 清空
el.clear()
# 输入
el.send_keys(value)
# 获取文本方法
def base_get_text(self, loc):
return self.base_find(loc).text
# 截图方法
def base_screenshot_img(self):
img_path = DIR_PATH + os.sep + 'img' + os.sep + '{}.png'.format(time.strftime('%Y%m%d %H%M%S'))
return self.driver.get_screen_as_file(img_path)
5、登录业务结构搭建
app 登录page结构搭建
"""
将操作步骤封装 + 组合业务方法
"""
class PageAppLogin:
# 1、点击 我的
def page_app_click_me(self):
pass
# 2、点击 登录头像
def page_app_click_login_link(self):
pass
# 3、输入用户名
def page_app_input_username(self):
pass
# 4、输入密码
def page_app_input_password(self):
pass
# 5、点击勾选协议
def page_app_click_protocol(self):
pass
# 6、点击登录按钮
def page_app_click_login_btn(self):
pass
# 7、获取登录昵称
def page_app_get_login_nickname(self):
pass
# 组合业务
def page_app_login(self):
pass
2、登录配置信息整理 page---> __init__文件
from selenium.webdriver.common.by import By
"""
一、以下为app登录模块配置信息
"""
# 我的
app_login_me = By.XPATH, "//*[@text='我的']"
# 登录头像
app_login_icon = By.XPATH, "//*[@resource-id='com.tpshop.malls:id/head_img']"
# 用户名
app_username = By.XPATH, "//*[@resource-id='com.tpshop.malls:id/mobile_et']"
# 密码
app_pwd = By.XPATH, "//*[@resource-id='com.tpshop.malls:id/pwd_et']"
# 协议
app_pro = By.XPATH, "//*[@resource-id='com.tpshop.malls:id/agree_btn']"
# 登录按钮
app_login_btn = By.XPATH, "//*[@resource-id='com.tpshop.malls:id/login_tv']"
# 登录昵称
app_nickname = By.XPATH, "//*[@resource-id='com.tpshop.malls:id/nick_name_tv']"
3、登录page页面实现
page_app_login.py 文件实现
"""
将操作步骤封装 + 组合业务方法
"""
from time import sleep
import page
from base.base import Base
class PageAppLogin(Base):
# 1、点击 我的
def page_app_click_me(self):
self.base_click(page.app_login_me)
# 2、点击 登录头像
def page_app_click_login_link(self):
self.base_click(page.app_login_icon)
# 3、输入用户名
def page_app_input_username(self, username):
self.base_input(page.app_username, username)
# 4、输入密码
def page_app_input_password(self, pwd):
self.base_input(page.app_pwd, pwd)
# 5、点击勾选协议
def page_app_click_protocol(self):
self.base_click(page.app_pro)
# 6、点击登录按钮
def page_app_click_login_btn(self):
self.base_click(page.app_login_btn)
# 7、获取登录昵称
def page_app_get_login_nickname(self):
sleep(2)
return self.base_get_text(page.app_nickname)
# 组合业务
def page_app_login(self, username=15826331234, pwd=123456):
self.page_app_click_me()
self.page_app_click_login_link()
self.page_app_input_username(username)
self.page_app_input_password(pwd)
self.page_app_click_protocol()
self.page_app_click_login_btn()
# 提示:获取昵称需要加个强制等待时间 sleep(2)
原因:查找到元素之后,页面内容还没刷新,没有显示出来,可能会出现 昵称为 “优惠券”的bug
4、登录测试脚本实现