Jenkins UI与接口自动化测试持续集成实战

篇幅较长,要耐心阅读哦~

基础知识简要回顾

  • 持续集成、持续交付的好处与产生的必然性
  • Jenkins服务的搭建方法
  • Jenkins节点管理与用户权限
  • Jenkins插件
  • Jenkins父子多任务关联运行
  • Jenkins报警机制

目录

  • SeleniumUI自动化测试持续集成演练
  • 接口自动化测试持续集成演练

一、SeleniumUI自动化测试持续集成演练

Selenium自动化测试项目介绍

  • 用例业务内容:测试百度网首页搜索关键词之后,跳转页面标题的正确性
  • python代码实现
  • Web UI 测试框架 Selenium (WebDriver)
  • 自动化测试框架pytest
  • 开发工具 PyCharm
  • 源码位置:https://github.com/princeqjzh/iSelenium_Python

测试过程动作:

  • 访问首页,搜索“今日头条”,验证正确性
  • 访问首页,搜索“王者荣耀”,验证正确性
  • #######测试代码知识点:
  • 运行类需继承unittest.TestCase类
  • setUp()测试准备方法,用于环境初始化
  • tearDown()测试结束方法,用于环境清理
  • 所有测试执行方法需要以test_开头
  • 两个测试动作执行方法 test_webui_1(),test_webui_2()
  • get_config()方法读取配置文件
  • 运行程序之前需要将配置文件iselenium.ini 复制/粘贴到自己测试执行环境的user.home目录下,并按照自己机器的实际路径配置 chrome_driver的路径

Demo代码工程讲解

  • 开发工具PyCharm
  • 本地IDE运行测试类可以创建py.test运行方法

测试代码

  • 目录树

在这里插入图片描述

  • web_ut.py 文件
import allure
import configparser
import os
import time
import unittestfrom selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options@allure.feature('Test Baidu WebUI')
class ISelenium(unittest.TestCase):# 读入配置文件def get_config(self):config = configparser.ConfigParser()config.read(os.path.join(os.environ['HOME'], 'iselenium.ini'))return configdef tearDown(self):self.driver.quit()def setUp(self):config = self.get_config()# 控制是否采用无界面形式运行自动化测试try:using_headless = os.environ["using_headless"]except KeyError:using_headless = Noneprint('没有配置环境变量 using_headless, 按照有界面方式运行自动化测试')chrome_options = Options()if using_headless is not None and using_headless.lower() == 'true':print('使用无界面方式运行')chrome_options.add_argument("--headless")self.driver = webdriver.Chrome(executable_path=config.get('driver', 'chrome_driver'),options=chrome_options)@allure.story('Test key word 今日头条')def test_webui_1(self):""" 测试用例1,验证'今日头条'关键词在百度上的搜索结果"""self._test_baidu('今日头条', 'test_webui_1')@allure.story('Test key word 王者荣耀')def test_webui_2(self):""" 测试用例2, 验证'王者荣耀'关键词在百度上的搜索结果"""self._test_baidu('王者荣耀', 'test_webui_2')def _test_baidu(self, search_keyword, testcase_name):""" 测试百度搜索子函数:param search_keyword: 搜索关键词 (str):param testcase_name: 测试用例名 (str)"""self.driver.get("https://www.baidu.com")print('打开浏览器,访问 www.baidu.com .')time.sleep(5)assert f'百度一下' in self.driver.titleelem = self.driver.find_element_by_name("wd")elem.send_keys(f'{search_keyword}{Keys.RETURN}')print(f'搜索关键词~{search_keyword}')time.sleep(5)self.assertTrue(f'{search_keyword}' in self.driver.title, msg=f'{testcase_name}校验点 pass')

  • iselenium.ini 配置文件,配置文件需放到系统的家目录下,并添加chromedriver文件路径
    [driver]
    chrome_driver=<Your chrome driver path>
    

  • requirements.txt 依赖包文件
allure-pytest
appium-python-client
pytest
pytest-testconfig
requests
selenium
urllib3
  • README.md 帮助文件
**Selenium 自动化测试程序(Python版)**
运行环境:
- selenium web driver
- python3
- pytest
- git配置文件:iselenium.ini
- 将配置文件复制到本地磁盘的[user.home]目录
- 填入设备的chromwebdriver文件的全路径运行命令:
pytest -sv test/web_ut.py --alluredir ./allure-results

代码clone

  • 将iSelenium_Python源码克隆到你的本地
  • 可以先Fork然后再克隆你Fork之后的源码项目(源码修改后可以push到github)
  • 也可以直接下载(源码修改后不能push到github)
  • 克隆参考代码:git clone git@github.com:princeqjzh/iSelenium_Python.git

额外知识点:chrome driver怎么找?

  • 本机需要安装chrome浏览器
  • Chrome driver版本与chrome浏览器版本有支持对应关系
  • Chrome driver 下载参考网站:http://npm.taobao.org/mirrors/chromedriver/

在这里插入图片描述 Selenium自动化测试演练

  • 运行环境可以与Jenkins同一台机器,也可以与Jenkins不同机器
  • 实例使用与Jenkins同一台机器便于演示
  • 运行环境上需要事先配置python3运行环境,保证pytest可以运行
  • 确保环境配置是OK的,可以运行Selenium的web自动化测试程序

配置Allure报告

  • Allure Report -更好看一些
  • 环境准备:
  • 运行环境上需要安装allure report运行环境
  • Jenkins allure report 插件
  • 环境准备:
  • Python依赖准备:pip install allure-pytest
  • 添加代码:
  • @allure.feature(’ feature name’)
  • @allure.story(‘story name’)
  • 运行命令:
  • pytest -sv test/web_ut.py --alluredir ./allure-results

Jenkins配置

  • Jenkins中新建一个自由风格的项目

在这里插入图片描述
在这里插入图片描述

  • 配置git 地址链接(ssh格式),添加Checkout to sub-directory
    在这里插入图片描述
    在这里插入图片描述

  • 添加命令加载python库:pip install -r requirements.txt

  • 添加运行命令:pytest -sv test/web_ut.py

    其中. ~/.bash_profile是为了获取本机的环境变量

    cd iSelenium_Python:切换到项目目录
    在这里插入图片描述

  • 添加运行参数,控制是否为有界面运行,此步骤之前可以先试运行程序,没有错误后再添加

  • 添加Allure Report到 Post-build Actions中用于展示测试结果
    在这里插入图片描述
    在这里插入图片描述
  • 在这里插入图片描述

进行构建

  • 查看控制台输出
    在这里插入图片描述
  • 查看allure报告
    在这里插入图片描述
    在这里插入图片描述
  • 查看allure曲线图(至少运行两次)
    在这里插入图片描述

本章小结

  • 自动化测试实例:Python代码的 Selenium_Python项目
  • 利用配置文件记录环境参数,保证相同的代码可以在不同环境上去运行
  • Selenium 驱动UI测试运行
  • 利用参数控制是否带界面运行
  • 自动化测试框架pytest控制测试程序的生命周期
  • Allure Report生成测试报告
  • Jenkins任务集成整个自动化测试运行过程

二、接口自动化测试

接口自动化测试项目介绍

  • 接口测试应用:http://www.weather.com.cn/data/cityinfo/
  • 接口功能:获得对应城市的天气预报
  • 源码:Python
  • 功能包:HttpClient
  • 请求方法:Get
  • 自动化测试框架:pytest
  • 开发工具:PyCharm
  • 源码位置:https://github.com/princeqjzh/iInterface_python

业务过程

  • 请求接口传入对应参数
  • 解析返回JSON串
  • 获取对应[城市]返回值
  • 校验结果正确性
  • 输出报告

在这里插入图片描述

接口自动化测试项目源码讲解

  • 打开PyCharm
  • HttpClient:网络Http请求类
  • Weather():测试用例类
  • README.md:说明
  • 目录树
    在这里插入图片描述
  • jmx是与性能测试相关的,这里忽略
  • httpclient.py 封装和请求方法相关的函数
    import requests
    import urllib3class HttpClient:"""Generic Http Client class"""def __init__(self, disable_ssl_verify=False, timeout=60):"""Initialize method"""self.client = requests.session()self.disable_ssl_verify = disable_ssl_verifyself.timeout = timeoutif self.disable_ssl_verify:urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)def Get(self, url, headers=None, data=None, json=None, params=None, *args, **kwargs):"""Http get method"""if headers is None:headers = {}if self.disable_ssl_verify:response = self.client.get(url, headers=headers, data=data, json=json, params=params, verify=False, timeout=self.timeout, *args, **kwargs)else:response = self.client.get(url, headers=headers, data=data, json=json, params=params, timeout=self.timeout, *args, **kwargs)response.encoding = 'utf-8'print(f'{response.json()}')return response
    
  • weather_test.py 测试文件

import allurefrom unittest import TestCase
from library.httpclient import HttpClient@allure.feature('Test Weather api')
class Weather(TestCase):"""Weather api test cases"""def setUp(self):"""Setup of the test"""self.host = 'http://www.weather.com.cn'self.ep_path = '/data/cityinfo'self.client = HttpClient()@allure.story('Test of ShenZhen')def test_1(self):city_code = '101280601'exp_city = '深圳'self._test(city_code, exp_city)@allure.story('Test of BeiJing')def test_2(self):city_code = '101010100'exp_city = '北京'self._test(city_code, exp_city)@allure.story('Test of ShangHai')def test_3(self):city_code = '101020100'exp_city = '上海'self._test(city_code, exp_city)def _test(self, city_code, exp_city):url = f'{self.host}{self.ep_path}/{city_code}.html'response = self.client.Get(url=url)act_city = response.json()['weatherinfo']['city']print(f'Expect city = {exp_city}, while actual city = {act_city}')self.assertEqual(exp_city, act_city, f'Expect city = {exp_city}, while actual city = {act_city}')

  • requirements.txt 依赖库
allure-pytest
appium-python-client
pytest
pytest-testconfig
requests
selenium
urllib3
  • README.md 说明文档
**接口功能自动化测试程序(Python版)**
运行环境:
- python3
- pytest
- allure report
- git依赖准备:
pip install allure-pytest运行命令:
pytest -sv test/weather_test.py --alluredir ./allure-results
  •  模拟接口测试用例通过:actual _value == expect _value
  • 模拟接口测试用例失败:actual value != expect_ _value
  • 本地代码讲解和运行演示-Demo

Jenkins配置

  • 复习知识点:Slave节点配置管理演示
  • 权限配置
  • Known host操作:Know host 是机器的ssl的校验机制,在机器的home目录下一般有.ssh的目录,该目录下有known hosts 文件,该文件存放的是被当前机器所信任的服务器ip

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • Jenkins中创建自由风格任务
    在这里插入图片描述
  • 添加Git地址
    在这里插入图片描述

  • 添加sub-directory

在这里插入图片描述

  • 添加命令加载Python库:pip3.9 install -r requirements.txt

  • 添加运行命令:pytest -sv test/weather_test.py -alluredir ./allure-results
    在这里插入图片描述

  • 配置Allure Report插件
    在这里插入图片描述

  • post-build Actions
    在这里插入图片描述

  • 运行Jenkins
    在这里插入图片描述

在这里插入图片描述

本章小结

  • 自动化测试实例:Python代码
  • 利用Python常用package中的类发起接口请求、获取接口返回值、解析JSON字段、校验结果正确性
  • 利用pytest框架来运行接口测试,控制程序的生命周期
  • Allure report测试结果展示
  • Jenkins任务:源码同步、运行任务、展示测试报告、发送邮件

三、总结

  • Web UI自动化测试持续集成
  • 接口自动化测试持续集成
  • 通过参数来控制运行方式
  • 控制有界面or无界面运行
  • Allure Report展示测试结果报告
  • Jenkins + python + allure

软件测试学习资料获取关注公众号:程序员雷叔 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/877578.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue+echarts:echarts地图页面跳转

在setOption的平级写点击事件&#xff0c;给chart添加click监听 getmapChart.setOption({......})//和数据对应即可 //点击区域实现页面跳转getmapChart.on(click,function(params){// console.log(params);switch(params.name){case "xxxx":top.location.href"…

JUC阻塞队列(四):DelayQueue

1、DelayQueue介绍 DelayQueue 是一个延迟队列&#xff0c;生产者写入一个数据&#xff0c;这个数据具有被直接消费的延迟时间&#xff0c; 让数据具有延迟的特性。 DelayQueue底层也是基于二叉堆来实现的&#xff0c;DelayQueue本就是基于PriorityBQueue 实现的。 二叉堆结构每…

Kubernetes Pod入门

在 Kubernetes 中&#xff0c;一个重要的概念就是 Pod(豆英)&#xff0c;Kubernetes 并不是直接管理容器他的最小管理单元叫做 Pod。的&#xff0c; 在 Docker 的应用中&#xff0c;我们把一个应用程序封装在一个镜像中&#xff0c;之后启动这个镜像并映射一个宿主机端…

x-cmd pkg | dua - 一个可以方便地了解给定目录的磁盘空间使用情况的工具

目录 简介用户首次快速实验指南技术特点竞品和相关项目进一步阅读 简介 dua 是 Disk Usage Analyzer 的简写&#xff0c;该工具可以快速查看给定目录的磁盘空间使用情况。 对于想要深入了解磁盘空间使用情况并有效管理存储的用户来说&#xff0c;Dua 是一个很有价值的工具。通…

华硕飞行堡垒键盘全部失灵【除电源键】

华硕飞行堡垒FX53VD键盘全部失灵【除电源键】 前言一、故障排查二、发现问题三、使用方法总结 前言 版本型号&#xff1a; 型号 ASUS FX53VD&#xff08;华硕-飞行堡垒&#xff09; 板号&#xff1a;GL553VD 故障情况描述&#xff1a; 键盘无法使用&#xff0c;键盘除开机键外…

轮式自主移动机器人的研究发展与ROS环境搭建

前言&#xff1a; 在轮式自主移动机器人的研发过程中&#xff0c;编程技术的重要性不言而喻。编程不仅涉及到机器人各种功能模块的协调运作&#xff0c;还决定了机器人能否实现复杂的行为决策和控制。首先&#xff0c;编程技术为机器人提供了“大脑”&#xff0c;从而使其能够感…

暑假请停止躺平!0门槛赚22万奖金!

在这个数字化时代&#xff0c;数据成为推动社会进步的重要力量。您是否想运用手中的数据&#xff0c;为治理与环保领域贡献力量&#xff1f;现在&#xff0c;机会就在眼前&#xff01; 2024年厦门市大数据创新应用大赛正在火热进行中&#xff0c;我们诚邀全国高等院校在校学生…

工厂现场多功能帮手,三防平板改善管理体验

随着制造业的智能化变革&#xff0c;信息化、自动化和智能化逐渐成为工厂管理的新常态。在这一波技术浪潮中&#xff0c;三防平板作为一种多功能的工作工具&#xff0c;正在逐步改善工厂现场的管理体验。 一、三防平板的定义与特点 三防平板&#xff0c;顾名思义&#xff0c;是…

『 Linux 』利用UDP套接字实现简单群聊

文章目录 服务端通过传入命令处理实现远程命令执行使用Windows编辑UDP客户端实现Windows远程控制Linux接收套接字的其他信息UDP套接字简单群聊服务端UDP套接字简单群聊客户端运行测试及分离输入输出 参考代码 服务端通过传入命令处理实现远程命令执行 『 Linux 』利用UDP套接字…

springboot医疗远程管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图详细视频演示技术栈系统测试为什么选择我官方认证玩家&#xff0c;服务很多代码文档&#xff0c;百分百好评&#xff0c;战绩可查&#xff01;&#xff01;入职于互联网大厂&#xff0c;可以交流&#xff0c;共同进步。有保障的售后 代码参考数据库参…

el-table实现动态添加行,并且有父子级联动下拉框

<template><div><el-button click"addRow">添加行</el-button><el-table :data"tableData" style"width: 100%"><el-table-column label"序号"type"index"width"100"align"…

【ARM+Codesys 客户案例 】基于RK3568/A40i/STM32+CODESYS开发的控制器在自动输送分拣系统上的应用,支持定制

2021年“京东618” 累计下单金额超3438亿元,再次刷新纪录! 从下单到收货&#xff0c;各种货品均可在短短几天内通过四通八达的物流网络送达全国任何一个家庭。电子商务和快递物流的迅猛发展对仓储、分拣、配送效率和准确性均提出了更高的要求&#xff0c;加速了智能物流的发展。…

如何免费获取乡镇级边界数据geoJson数据

如何免费获取乡镇级边界数据geoJson数据 我们可以通过 阿里云数据可视化平台 &#xff0c;可以获取到中国各个省份/区级/县级的json数据&#xff0c;但是区级和县级&#xff0c;并没有包含街道和乡镇的数据 获取乡镇级边界数据 1.下载bigemap全能版 安装好后选择你要导出的…

C++竞赛初阶L1-13-第五单元-循环嵌套(29~30课)537: T456456 质因数分解

题目内容 已知正整数 n 是两个不同的质数的乘积&#xff0c;试求出较大的那个质数。 输入格式 输入只有一行&#xff0c;包含一个正整数 n&#xff08;6<n<109&#xff09;。 输出格式 输出只有一行&#xff0c;包含一个正整数 p&#xff0c;即较大的那个质数。 样例…

《黑神话:悟空》媒体评分解禁 M站均分82

《黑神话&#xff1a;悟空》媒体评分现已解禁&#xff0c;截止发稿时&#xff0c;M站共有43家媒体评测&#xff0c;均分为82分。 部分媒体评测&#xff1a; God is a Geek 100&#xff1a; 毫无疑问&#xff0c;《黑神话&#xff1a;悟空》是今年最好的动作游戏之一&#xff…

ant design pro v6 如何做好角色管理

先上图&#xff1a; 整个角色管理是如何做的吗&#xff1f; 首先你要处理后端&#xff0c;要先把角色存到用户那。 这是用户管理部分的内容&#xff1a; 可以看到一个用户是有多个角色的。 看到没有&#xff0c;存的是数组 数组的是一个 role 对象 role 对象是这样&#xf…

在选择或推荐数据恢复软件之前,您如何测试和审查它?

数据恢复软件可以帮助您从各种存储设备中检索丢失或删除的文件&#xff0c;例如硬盘驱动器&#xff0c;USB闪存驱动器&#xff0c;存储卡或智能手机。但是&#xff0c;并非所有数据恢复软件都是一样的&#xff0c;根据您的情况和需求&#xff0c;有些软件的性能可能比其他软件更…

网安入门—信息收集

1.定义 信息收集是指收集有关目标应用程序和系统的相关信息。这些信息可以帮助攻击者了解目标系统的架构、技术实现细节、运行环境、网络拓扑结构、安全措施等方面的信息&#xff0c;以便我们在后续的渗透过程更好的进行。 2.分类 主动信息收集和被动信息收集 区别&#xf…

微信公众号发送模板消息使用说明

一、获取access_token def get_access():appid secret url fhttps://api.weixin.qq.com/cgi-bin/token?grant_typeclient_credential&appid{appid}&secret{secret}res requests.get(url).json()return res 返回结果如下&#xff1a; {access_token: 83_TAxuwdt…

android FD_SET_chk问题定位

android FD_SET_chk问题定位 一、FD报错二、问题定位2.1 APM定位2.2 adb定位2.3. 代码获取FD数 三、FD优化 一、FD报错 App在运行中记录报错如下&#xff0c;FD_SET&#xff0c;这个问题大概是文件描述符&#xff08;File Descriptor&#xff0c;简称FD&#xff09;超过了最大…