selenium
一:selenium3 安装
- pip install selenium (比较慢)
- 压缩包安装
- https://pypi.org/project/selenium/ (较快)
- Download files => selenium-*.tar.gz
- 解压,进入文件夹。python setup.py install
- pip list 验证是否安装
二:验证使用
- https://npm.taobao.org/mirrors/chromedriver/84.0.4147.30/ 安 装Chrome 驱动
- 注意 Chrome 版本要对应,否则不会生效, 如何查看 Chrome 版本:
chrome://version/ - 解压 => cd ~/DeskTop && cp ./chromedriver /usr/local/bin && cd
/usr/local/bin && ls | grep chrome
三 :自动化测试的优缺点
优点:1. 节省人力,避免做重复性的工作
- 覆盖范围广,稳定性较高
缺点:1. 不适合需求变更较快的场景 - 不适合周期短的项目
四:selenium 定位元素
- find_element_by_id() => 定位 id
- find_element_by_name() => tag name
- find_element_by_class_name() => class
- find_element_by_css_selector => css 选择器
五:selenium 常用 Api
- clear() 清空输入
- send_keys() 输入
- back() 返回
- click() 点击
- maximize_window() 最大化窗口
- getAttribute() 获取元素的属性
- getCssValue() 获取 css 属性
- getText() 获取文本
六 :selenium 模拟用户操作 (比如鼠标悬停 hover 等等)
- 引入 selenium 中用户操作模块
引 用 : from selenium.webdriver.common.action_chains import
ActionChains
使用:ActionChains(driver).click(ele).perform() // perform 是指执行所
有链式操作 - 常见鼠标操作:
- click(on_element=None) 单击鼠标左键
- context_click(on_element=None) 点击鼠标左键
- double_click(on_element=None) 双击左键
- move_to_element(to_element) 鼠标移动到某个元素
- 常见键盘操作 直接上网搜 selenium send_keys,就有各种详细的介绍
from selenium.webdriver.common.keys import Keys - 单击键盘
driver.find_element_by_id(“kw”).send_keys(Keys.SPACE) - 组合键
driver.find_element_by_id(‘kw’).send_keys(Keys.CONTROL,‘v’)
driver.find_element_by_id(“kw”).send_keys(Keys.CONTROL,‘a’)
driver.find_element_by_id(“kw”).send_keys(Keys.CONTROL,‘x’)
七: unittest 单元测试框架
- 用 import 语句引入 unittest 模块
- 测试的类都继承于 TestCase 类
- setUp() 测试前的初始化工作;tearDown()测试后的清除工作(每个测试
用例都会执行)
注意:1. 所有类中的方法的入参为 self,定义方法的变量也要”self.
变量“ - 定义测试用例,以 test 开头命名的方法,方法的入参为 self
- unittest.main()方法会搜索该模块下所有以 test 开头的测试用
例方法,并自动指定它们 - 注意文件不能用 unittest.py 命名,否则找不到 TestCase
成功输出. 失败输出 F - 常用断言 api
self.assertEqual(‘xxx’,‘xxxx’,msg=‘xxxx’) // 判断是否相等,msg 是不
满足条件的提示语
self.assertTrue(‘xxxx’,msg='xxxx) // 判断输入的值是否为 true
self.assertFalse(‘xxxx’,msg=‘xxxxx’) // 判断输入的值是否为 false
八: 件 测试套件 TestSuite, 用以控制测试用例的执行顺序
- unittest.TestSuite() // 生成 suite 实例
- suite.addTest() // 向其中添加测试用例
- unittest.TextTestRunner(verbosity=1) // verbosity 参数控制报告的详细
程度: 0 简单报告 1 一般报告 2 详细报告 - runner.run(suite) // 执行测试用例
九:测试报告的生成,使用 HTMLTestRunner
当前的测试报告可读性非常差,需要有一个可视化的工具,方便我们阅读和
分析测试结果。所以我们就需要这个工具.
- 下载地址 http://tungwaiyip.info/software/HTMLTestRunner.html
- python => import sys => sys.path => 确定 python 的安装目录, 数组的
第二个 - 将 HTMLTestRunner.py 移动到这个安装目录下
- import 验证
代码演示
# -*- coding:utf-8 -*-
# unittest 不用安装直接引入
import unittest
# 时间模块
import time
# 用于辅助生成测试报告,本地copy文件后,一定要移动到python的安装目录下。python安装目录如何查看:import sys => sys.path
import HTMLTestRunner
from selenium import webdriver
# 常用键盘的Keys
# Keys.CONTROL control 键
# Keys.SPACE 空格键...
from selenium.webdriver.common.keys import Keys
# 打开网页
web = webdriver.Chrome()
web.maximize_window()
web.get('https://www.runoob.com/')
class UserTestCase(unittest.TestCase):
# setUp -> case -> tearDown
# 每个自动化测试用例开始都会执行的函数,参数都传self
def setUp(self):
print('---setUp---')
# 每个自动化测试用例结束都会执行的函数,参数都传self
def tearDown(self):
print('----tearDown----')
# 普通测试用例,成功会输出. 失败会输出F。测试用例的命名要以test_开头
def test_firstCase(self):
web.find_element_by_css_selector('#s').send_keys('hello world')
res = web.find_element_by_css_selector('#s').get_attribute('value')
# 常用断言api有以下几种
# self.assertEqual() 是否相等
# self.assertTrue() 是否为true
# self.assertFalse() 是否为false
self.assertEqual(res,'hello')
print('firstCase')
def test_secondCase(self):
self.assertEqual(1,1,msg='值不相等')
print('secondCase')
def test_thirdCase(self):
print('do anything')
if __name__ == '__main__':
# unittest.main()
# TestSuite测试套件,保证测试用例的执行顺序。
suite = unittest.TestSuite()
suite.addTest(UserTestCase('test_thirdCase'))
suite.addTest(UserTestCase('test_secondCase'))
suite.addTest(UserTestCase('test_firstCase'))
# 格式化测试用例报告的文件名
file_prefix = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
# 创建文件句柄,写入测试用例报告并且格式化为HTML文件
fp = open("./"+file_prefix+"_result.html","wb")
runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title=u"第一份测试报告",description=u"测试详情")
runner.run(suite)
fp.close()
Jenkins
一:CI 、CD 概念解释
CI:就是将你写的代码,转化为可用的产出。这个产出不同场景下可能代表
不同的东西
CD:将可用的输出提供给用户使用,也就是部署
二:常见的 CI 、CD 工具对比
gitlab CI: 配置文件易于配置而且结合 Docker 让 CI、CD 脱离系统的限制,可以跑在不同的实例上,缺点就是只能使用 gitlab CI 而且不如 Jenkins 灵活
jenkins: 包含了很多丰富的插件,保证了构建系统的灵活性。但是也是双刃剑,牺牲了构建流程的稳定性。新增的管道工作流程:以插件为中心的配置模型
有时很难轻松复制到不同的 Jenkins 实例上
三:Java 环境环境准备
yum list java*
yum install xxxxx
java --version
四:Jenkins 安装
yum的repo文件中没有Jenkins的源,所以我们要手动添加Jenkins的yum
源
- sudo wget -O /etc/yum.repos.d/jenkins.repo
http://pkg.jenkins-ci.org/redhat/jenkins.repo - sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
- sudo yum install -y jenkins
- systemctl start jenkins
- systemctl status 查看 Jenkins 服务的状态以及启动端口
五:jiekins 默认文件与文件夹
/usr/lib/jenkins/ Jenkins 的 war 包
/etc/sysconfig/jenkins 默认配置
/var/lib/jenkins/users 默认用户文件夹
六:git 配置 webhook
- jenkins 主界面 => 系统管理 => 系统配置 => Github 服务器 => 高级
=> 勾选覆盖 Hook URL => 复制生成的 URL - github 项目主界面 => Settings => Webhooks => 新建 webhook =>
Payload URL 填入刚刚复制的 URL => 点击新建 webhook 或者更新 webhook
七:Jenkins 部署 Vue
- 配置 nginx 服务器
yum list nginx* or yum search nginx* 安装 nginx
nginx -t 查看和校验 nginx 配置文件 - 第一次部署时,手动发布 Vue