当前位置:   article > 正文

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

jenkins怎么测试接口

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

基础知识简要回顾

  • 持续集成、持续交付的好处与产生的必然性
  • 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 文件
  1. import allure
  2. import configparser
  3. import os
  4. import time
  5. import unittest
  6. from selenium import webdriver
  7. from selenium.webdriver.common.keys import Keys
  8. from selenium.webdriver.chrome.options import Options
  9. @allure.feature('Test Baidu WebUI')
  10. class ISelenium(unittest.TestCase):
  11. # 读入配置文件
  12. def get_config(self):
  13. config = configparser.ConfigParser()
  14. config.read(os.path.join(os.environ['HOME'], 'iselenium.ini'))
  15. return config
  16. def tearDown(self):
  17. self.driver.quit()
  18. def setUp(self):
  19. config = self.get_config()
  20. # 控制是否采用无界面形式运行自动化测试
  21. try:
  22. using_headless = os.environ["using_headless"]
  23. except KeyError:
  24. using_headless = None
  25. print('没有配置环境变量 using_headless, 按照有界面方式运行自动化测试')
  26. chrome_options = Options()
  27. if using_headless is not None and using_headless.lower() == 'true':
  28. print('使用无界面方式运行')
  29. chrome_options.add_argument("--headless")
  30. self.driver = webdriver.Chrome(executable_path=config.get('driver', 'chrome_driver'),
  31. options=chrome_options)
  32. @allure.story('Test key word 今日头条')
  33. def test_webui_1(self):
  34. """ 测试用例1,验证'今日头条'关键词在百度上的搜索结果
  35. """
  36. self._test_baidu('今日头条', 'test_webui_1')
  37. @allure.story('Test key word 王者荣耀')
  38. def test_webui_2(self):
  39. """ 测试用例2, 验证'王者荣耀'关键词在百度上的搜索结果
  40. """
  41. self._test_baidu('王者荣耀', 'test_webui_2')
  42. def _test_baidu(self, search_keyword, testcase_name):
  43. """ 测试百度搜索子函数
  44. :param search_keyword: 搜索关键词 (str)
  45. :param testcase_name: 测试用例名 (str)
  46. """
  47. self.driver.get("https://www.baidu.com")
  48. print('打开浏览器,访问 www.baidu.com .')
  49. time.sleep(5)
  50. assert f'百度一下' in self.driver.title
  51. elem = self.driver.find_element_by_name("wd")
  52. elem.send_keys(f'{search_keyword}{Keys.RETURN}')
  53. print(f'搜索关键词~{search_keyword}')
  54. time.sleep(5)
  55. self.assertTrue(f'{search_keyword}' in self.driver.title, msg=f'{testcase_name}校验点 pass')

 

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

  • requirements.txt 依赖包文件
  1. allure-pytest
  2. appium-python-client
  3. pytest
  4. pytest-testconfig
  5. requests
  6. selenium
  7. urllib3
  • README.md 帮助文件
  1. **Selenium 自动化测试程序(Python版)**
  2. 运行环境:
  3. - selenium web driver
  4. - python3
  5. - pytest
  6. - git
  7. 配置文件:iselenium.ini
  8. - 将配置文件复制到本地磁盘的[user.home]目录
  9. - 填入设备的chromwebdriver文件的全路径
  10. 运行命令:
  11. 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 封装和请求方法相关的函数
    1. import requests
    2. import urllib3
    3. class HttpClient:
    4. """Generic Http Client class"""
    5. def __init__(self, disable_ssl_verify=False, timeout=60):
    6. """Initialize method"""
    7. self.client = requests.session()
    8. self.disable_ssl_verify = disable_ssl_verify
    9. self.timeout = timeout
    10. if self.disable_ssl_verify:
    11. urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
    12. def Get(self, url, headers=None, data=None, json=None, params=None, *args, **kwargs):
    13. """Http get method"""
    14. if headers is None:
    15. headers = {}
    16. if self.disable_ssl_verify:
    17. response = self.client.get(url, headers=headers, data=data, json=json, params=params
    18. , verify=False, timeout=self.timeout, *args, **kwargs)
    19. else:
    20. response = self.client.get(url, headers=headers, data=data, json=json, params=params
    21. , timeout=self.timeout, *args, **kwargs)
    22. response.encoding = 'utf-8'
    23. print(f'{response.json()}')
    24. return response
  • weather_test.py 测试文件

 

  1. import allure
  2. from unittest import TestCase
  3. from library.httpclient import HttpClient
  4. @allure.feature('Test Weather api')
  5. class Weather(TestCase):
  6. """Weather api test cases"""
  7. def setUp(self):
  8. """Setup of the test"""
  9. self.host = 'http://www.weather.com.cn'
  10. self.ep_path = '/data/cityinfo'
  11. self.client = HttpClient()
  12. @allure.story('Test of ShenZhen')
  13. def test_1(self):
  14. city_code = '101280601'
  15. exp_city = '深圳'
  16. self._test(city_code, exp_city)
  17. @allure.story('Test of BeiJing')
  18. def test_2(self):
  19. city_code = '101010100'
  20. exp_city = '北京'
  21. self._test(city_code, exp_city)
  22. @allure.story('Test of ShangHai')
  23. def test_3(self):
  24. city_code = '101020100'
  25. exp_city = '上海'
  26. self._test(city_code, exp_city)
  27. def _test(self, city_code, exp_city):
  28. url = f'{self.host}{self.ep_path}/{city_code}.html'
  29. response = self.client.Get(url=url)
  30. act_city = response.json()['weatherinfo']['city']
  31. print(f'Expect city = {exp_city}, while actual city = {act_city}')
  32. self.assertEqual(exp_city, act_city, f'Expect city = {exp_city}, while actual city = {act_city}')

 

  • requirements.txt 依赖库
  1. allure-pytest
  2. appium-python-client
  3. pytest
  4. pytest-testconfig
  5. requests
  6. selenium
  7. urllib3
  • README.md 说明文档
  1. **接口功能自动化测试程序(Python版)**
  2. 运行环境:
  3. - python3
  4. - pytest
  5. - allure report
  6. - git
  7. 依赖准备:
  8. pip install allure-pytest
  9. 运行命令:
  10. 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

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

 

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号