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

news2024/11/27 21:52:25

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

基础知识简要回顾

  • 持续集成、持续交付的好处与产生的必然性
  • 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 unittest

from 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 config

    def tearDown(self):
        self.driver.quit()

    def setUp(self):
        config = self.get_config()

        # 控制是否采用无界面形式运行自动化测试
        try:
            using_headless = os.environ["using_headless"]
        except KeyError:
            using_headless = None
            print('没有配置环境变量 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.title

        elem = 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 urllib3
    
    
    class 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_verify
            self.timeout = timeout
            if 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 allure

from 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.coloradmin.cn/o/573121.html

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

相关文章

采埃孚-4D毫米波雷达拆解分析

采埃孚4D毫米波雷达拆解分析 4D毫米波雷达具有4个维度的信息&#xff0c;分别是距离、速度、方向角和高度。下面分析采埃孚再飞凡汽车上的4D毫米波雷达。 4D毫米波雷达共由四部分组成&#xff0c;分别为&#xff1a;数字接口板及结构件、屏蔽罩、发射单元及PCB以及雷达天线罩…

如何在 Linux、Windows 和 Mac 上查找 WiFi 密码?

无线网络已成为我们日常生活中不可或缺的一部分&#xff0c;我们经常需要连接各种WiFi网络。但是&#xff0c;有时我们可能会忘记自己的WiFi密码&#xff0c;或者需要连接到一个以前连接过的网络。在这种情况下&#xff0c;我们可以使用一些方法来查找已连接网络的密码。 本文将…

研报精选230526

目录 【行业230526山西证券】有色金属行业周报&#xff1a;锂价强势反弹回30万元or吨 【行业230526开源证券】食品饮料行业投资策略&#xff1a;消费复苏贯穿全年&#xff0c;结构分化择机布局 【行业230526德邦证券】核电行业深度系列报告&#xff1a;积极安全有序发展核电&am…

8-JDBC 编程

目录 1.数据库编程的必备条件 PS&#xff1a;程序是怎么操作数据库的&#xff1f; 2.什么是JDBC&#xff1f; 2.1.JDBC定义 2.2.JDBC工作原理 3.JDBC使用 3.1.创建项目并添加MySQL驱动包 3.2.使用代码操作数据库 3.2.1.获得数据源 3.2.2.获得连接 3.2.3.获得执行器 …

软考A计划-2022年11月软件设计师下午真题及答案解析

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

【云原生|Kubernetes】06-Pod的生命周期和重启策略

【云原生|Kubernetes】06-Pod的生命周期和重启策略 文章目录 【云原生|Kubernetes】06-Pod的生命周期和重启策略Pod生命周期生命周期Pod的状态Pod子状态 Pod重启策略调试PodPod 停滞在 Pending 状态Pod 停滞在 Waiting 状态Pod 处于 Crashing 或别的不健康状态Pod 处于 Running…

【LeetCode热题100】打卡第4天:寻找两个正序数组的中位数

文章目录 寻找两个正序数组的中位数⛅前言&#x1f512;题目&#x1f511;题解 寻找两个正序数组的中位数 ⛅前言 大家好&#xff0c;我是知识汲取者&#xff0c;欢迎来到我的LeetCode热题100刷题专栏&#xff01; 精选 100 道力扣&#xff08;LeetCode&#xff09;上最热门的…

89.qt qml-WorkerScript多线程使用(无需C++代码)

由于我们自定义Table中需要实现排序,如下图所示: 考虑到如果数据量太大的情况,为了避免主线程阻塞,所以我们添加多线程排序功能,为了方便大家更好学习qml组件,所以学习WorkerScript实现多线程,无需C++ 1.描述 使用 WorkerScript 在新线程中运行操作。这对于在后台运行操…

微信小程序为什么不用HTML5、CSS,自己搞了个WXML、WXSS,很多框架用不了,好处一点不知道?

你在小程序中需要使用HTML5、 CSS来创建页面&#xff0c;那么你一定会碰到一些问题&#xff0c;比如&#xff1a; 1.小程序中的布局没有 JS支持&#xff0c;没有 JS渲染逻辑。 2.没有内置 css&#xff0c;都是靠 JS自己实现的。 3.很多框架不能使用&#xff0c;比如&#xf…

5年华为外包,外包究竟怎么样....

最近身边很多人进了外包或者被问到进到外包公司怎么样&#xff0c;感觉大家对外包公司不是很了解&#xff0c;也有一些误解&#xff0c;我们看看过来人怎么说。 5年外包时光 我曾是华为外包软件测试员工&#xff0c;就职于东莞松山湖&#xff0c;2017年9月12号入职&#xff0c…

ARM--计算机基础知识

目录 一.Linux层次结构 谈谈对嵌入式的理解 三层&#xff1a; 应用层 内核层 硬件层 二、计算机的进制 三、计算机的组成 1.输入设备 2.输出设备 3.存储器 4.运算器 5.控制器 总线 四、ARM存储模型 1. Cache:高速缓冲存储器 2. 主存储器&#xff1a;相当于内存 …

Day1:手写第一个Win32程序

学习重点&#xff1a; 1. 理解这个Win32窗口程序的实现逻辑 2. 学习Windows消息循环机制 3. 了解Windows的数据类型 4. 明白Winmain函数的作用 首先这个Winodws窗口程序在之后的学习并不需要进行手写&#xff0c;这里的重点是学习代码的逻辑&#xff0c;虽然有一些参数的含义尚…

vue3 集成kindeditor研究

kindeditor虽然老&#xff0c;但是稳定&#xff0c;最大的好外是word贴进去不变形&#xff0c;后端部分有安全隐患&#xff0c;我给去掉了&#xff0c;只保留了前端&#xff0c;集成jquery添加了跨域ajax上传功能。 用iframe引用实属无奈&#xff0c;因为尝试了好多次用ts封装都…

如何在华为OD机试中获得满分?Java实现【快速开租建站】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述4. Java算法源码5. 测试6.解题思路1. 题目描述 当前IT部门支撑了子公司…

【2023年电工杯竞赛】B题 人工智能对大学生学习影响的评价 数学建模方案和python代码

1 题目 B题 人工智能对大学生学习影响的评价 人工智能简称AI&#xff0c;最初由麦卡锡、明斯基等科学家于1956年在美国达特茅斯学院开会研讨时提出。 2016年&#xff0c;人工智能AlphaGo 4:1战胜韩国围棋高手李世石&#xff0c;期后波士顿动力公司的人形机器人Atlas也展示了…

【PICO G2 4K】 + 【Unity2020.3.40】 :Android 发布设置

一、【设备】设置 设备开始USB调试模式&#xff0c;然后用usb线连接到电脑&#xff0c;识别后下拉框会显示该设备 二、【脚本调试】的Debug设置 如果要在PICO上读取脚本的Debug信息&#xff0c;则需要开启下图中选项&#xff0c;并配置adb工具读取log日志。 参考之前的blog…

学了两个多月软件测试,顺利过了试用期,拿到12K的我很满足了

先介绍一下&#xff0c;我是机械专业的&#xff0c;在一个大厂做售后工程师&#xff08;就是修东西的&#xff09;&#xff0c;做了几年没啥成绩&#xff0c;年龄越大&#xff0c;心里压力也越大&#xff0c;而且这种大型设备维修很容易出事故&#xff0c;就想着搞一门好点的技…

软件测试面试题【内附超详细面试宝典】

一般软件测试的面试分为三轮&#xff1a;笔试&#xff0c;HR面试&#xff0c;技术面试。 前两轮&#xff0c;根据不同企业&#xff0c;或有或无&#xff0c;但最后一个技术面试是企业了解你“行不行”的关键环节&#xff0c;每个企业都会有的。 在平时的学习、工作中一定要善…

《Zookeeper》从零开始学Zookeeper源码(一)之源码环境搭建

目录 源码环境搭建1. 下载源码2. 编译3. Eclipse启动服务端4. 启动客户端 源码环境搭建 1. 下载源码 下载地址&#xff1a; github 2. 编译 进入下载好的源码的根目录&#xff0c;因为下载依赖的时候需要apache的maven元数据&#xff0c;目前最高的版本为3.8.0-SNAPSHOT&am…

【分享】科大讯飞星火认知大模型(初体验)

前言&#xff1a; 哈喽&#xff0c;大家好&#xff0c;我是木易巷~ 随着人工智能技术的迅猛发展&#xff0c;自然语言处理&#xff08;NLP&#xff09;成为了热门话题。在众多NLP模型中&#xff0c;科大讯飞星火认知大模型成为了一个备受瞩目的新秀&#xff0c;今天我们来了解…