精华内容
下载资源
问答
  • 详细介绍了使用XcodeXcode Server 实现 iOS 移动应用的自动化测试与持续集成过程。
  • 本文来自于网络,文章主要介绍了微服务架构下解决自动化测试、开发联调、测试环境、持续集成方面遇到的问题及解决方案等。在2008年时,市场软件形式大多为CS架构。当时存在的问题在于,开发耗时1-2年且内部的解耦度...
  • Nightwatch.js - 基于Node.js和Webdriver的自动化测试与持续集成框架
  • 接口自动化测试 接口自动化的持续集成 探讨 传统接口测试 不知道别人家的接口测试是怎么做的。这边是用postman这个google插件。测试人员按照接口开发人员的wiki,设计测试用例,然后post/get一下。查看返回...

    有人在上一个帖子中问,为什么要把接口测试排在最前面。 原因很简单,接口是先行的,接口没做好,后面的编码工作受限,拿不到数据。

    1. 传统接口测试
    2. 接口自动化测试
    3. 接口自动化的持续集成
    4. 探讨

    传统接口测试


    不知道别人家的接口测试是怎么做的。这边是用postman这个google插件。测试人员按照接口开发人员的wiki,设计测试用例,然后post/get一下。查看返回json的状态或者字段。


    弱点是不便于管理case和不方便统计结果,执行要一个一个手工去点,效率低下。

    接口测试自动化


    我用python写了个脚本,将case写在excel里,然后读取excel来实现这个过程,并自动判断和统计结果,生成报告。
    case这么设计的。


    脚本这么写的:

    #encoding:utf-8
    
    import ConfigParser
    import os
    import xlrd
    import re
    import httplib
    import urllib
    from urlparse import urlparse
    import json
    import time
    import unittest
    import pdf
    
    currentdir=os.path.split(os.path.realpath(__file__))[0]
    class test_class():
        def getexcel(self):
            casefile=currentdir + '/case.xls'
            if ((os.path.exists(casefile))==False):
                print "当前路径下没有case.xls,请检查!"
            data=xlrd.open_workbook(casefile)
            table = data.sheet_by_name('login')
            nrows = table.nrows #行数
            ncols = table.ncols #列数
        #colnames = table.row_values(1) #某一行数据
            for rownum in range(1,nrows):
                for col in range (3, ncols):
                    value=table.cell(rownum,col).value
                    if (col==3):
                        method=value
                    if (col==4):
                        url=value
            return table,nrows,ncols
    
        def getexceldetail(self,table,row,ncols):
            #rownum = table.row_values(row) #某一行数据
    
            for col in range (0, ncols):
                value=table.cell(row,col).value
                if (col==0):
                    caseid=value
            print caseid
                if (col==3):
                    method=value
            print method
                if (col==4):
                    url=value
            return method,url,caseid
    
        def httpget(self,url):
            httpClient = None
            conn = urlparse(url)
            url=url.encode('utf-8')
            try:
                httpClient = httplib.HTTPConnection(conn.netloc, timeout=10)
                httpClient.request('GET', url)
    
            # response是HTTPResponse对象
                response = httpClient.getresponse()
                print response
                d0=response.read()
                d0=d0.decode('unicode_escape')
            except Exception, e:
                print e
            finally:
                if httpClient:
                    httpClient.close()
        return response.status,d0
    
        def httppost(self,url):
            httpClient = None
            conn = urlparse(url)
            url=url.encode('utf-8')
            try:
                header = {"Content-type": "application/x-www-form-urlencoded",
                      "Accept": "text/plain"}
    
                httpClient = httplib.HTTPConnection(conn.netloc, timeout=30)
                httpClient.request("POST", url)
                response1 = httpClient.getresponse()
                d1=response1.read()
                d1=d1.decode('unicode_escape')
            except Exception, e:
                print e
            finally:
                if httpClient:
                    httpClient.close()
            return response1.status,d1
    

    代码太多了点,没写下。其实就是一个读excel,一个post,一个get的过程。
    后面还有一个对json的解析过程。开始以为是一个字典就搞定了,后面发现有些{}里面嵌套了好几层。
    最后用了个递归搞定。

    #! /usr/bin/env python
    #coding=utf-8
    import urllib2
    import json
    
    
    class readjson():
        def read(self,obj,key):
            collect = list()
            for k in obj:
                v = obj[k]
    
                if isinstance(v,str) or isinstance(v,unicode):
                    if key== ' ':
                        collect.append({k:v})
                    else:
                        collect.append({str(key)+"."+k:v})
                elif isinstance(v,int):
                    if key== ' ':
                        collect.append({k:v})
                    else:
                        collect.append({str(key)+"."+k:v})
                elif isinstance(v,bool):
                    if key== ' ':
                        collect.append({k:v})
                    else:
                        collect.append({str(key)+"."+k:v})
                elif isinstance(v,dict):
                    collect.extend(read(v,k))
                elif isinstance(v,list):
                    collect.extend(readList(v,key))
            return collect
    
        def readList(self,obj,key):
            collect = list()
            for index,item in enumerate(obj):
                for k in item:
                    v = item[k]
                    if isinstance(v,str) or isinstance(v,unicode):
                        collect.append({key+"["+str(index)+"]"+"."+k:v})
                    elif isinstance(v,int):
                        collect.append({key+"["+str(index)+"]"+"."+k:v})
                    elif isinstance(v,bool):
                        collect.append({key+"["+str(index)+"]"+"."+k:v})
                    elif isinstance(v,dict):
                        collect.extend(read(v,key+"["+str(index)+"]"))
                    elif isinstance(v,list):
                        collect.extend(readList(v,key+"["+str(index)+"]"))
            return collect
    
    
    #ojt=test_data1
    
    #print read(ojt,' ')
    

    最后是结果:


    是用python写图表,生成pdf.

    from reportlab.graphics.shapes import Drawing  
    from reportlab.graphics.charts.barcharts import VerticalBarChart  
    from urllib import urlopen    
    from reportlab.graphics.shapes import *    
    from reportlab.graphics.charts.lineplots import LinePlot    
    from reportlab.graphics.charts.textlabels import Label    
    from reportlab.graphics import renderPDF  
    class pdfreport():
        def createpdf(self,datas):
            drawing = Drawing(400, 200)
            #data = [(13, 5, 20),(14, 6, 21)]
            data=datas
            bc = VerticalBarChart()
            bc.x = 50
            bc.y = 50
            bc.height = 125
            bc.width = 300
            bc.data = data
            bc.strokeColor = colors.black
            bc.valueAxis.valueMin = 0
            bc.valueAxis.valueMax = 50
            bc.valueAxis.valueStep = 10
            bc.categoryAxis.labels.boxAnchor ='ne'
            bc.categoryAxis.labels.dx = 8
            bc.categoryAxis.labels.dy = -2
            bc.categoryAxis.labels.angle = 30
            bc.categoryAxis.categoryNames = ['Jan-99','Feb-99','Mar-99']
            #bc.categoryAxis.categoryNames =ytype
            drawing.add(bc)
    
            drawing.add(String(250,150,"ss", fontSize=14,fillColor=colors.red))
            #drawing.add(String(250,150,des, fontSize=14,fillColor=colors.red))
            renderPDF.drawToFile(drawing,'report1.pdf','API')
            #renderPDF.drawToFile(drawing,'APIReport.pdf','API')
    
    datas=[(0,20),(0,25)]
    f=pdfreport()
    f.createpdf(datas)
    

    接口自动化的持续集成


    配置到jenkins上也很简单,这里就不过多描述。现在问题是,生成的报告是pdf。Jenkins里面不太好展现出来。弄成zip附件查看不方便。最后我写个脚本将其传到共享里面,或者写脚本用邮件发出来。后面写打包的时候会讲到的。

    探讨


    这些脚本,还有很多可以完善的地方。我也没有花太多的精力去完善,我的宗旨是花少的时间,搞出简单又好用的东西。
    上次看到思寒的一篇文章,就是自动生成接口的测试用例,这样效率大大提高了。
    思寒:接口测试中数值 diff 
    遗憾的是,我没有完全搞明白他具体怎么做的,还要向思寒学习。

    PS: 最近想挪窝,base上海,求收留。可以联系恒温和在群里找糖果

    展开全文
  • 有人在我前面的帖子里面回复,可以用 Jmeter 来做接口测试. 稍微尝试了下,来给大家分享,完全是现学现卖,还请大家多多提意见。...接口测试主要用于检测外部系统系统之间以及内部各个子系统之间

    有人在我前面的帖子里面回复,可以用 Jmeter 来做接口测试. 稍微尝试了下,来给大家分享,完全是现学现卖,还请大家多多提意见。
    Jmeter 这工具好用,又开源,我是看了一遍官方文档,将其捡起来的。 
    为了让文章具备完整性,以下有些文字是网络找的。

    一、什么是接口测试?

      接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。
      接口测试适用于为其他系统提供服务的底层框架系统和中心服务系统,主要测试这些系统对外部提供的接口,验证其正确性和稳定性。接口测试同样适用于一个上层系统中的服务层接口,越往上层,其测试的难度越大。
      接口测试实施在多系统多平台的构架下,有着极为高效的成本收益比,接口测试天生为高复杂性的平台带来高效的缺陷监测和质量监督能力。平台越复杂,系统越庞大,接口测试的效果越明显。
      基于接口测试的重要性,以及它比较容易自动化的特性,通过持续集成的接口监控能够及时的发现项目中存在的问题,这对持续运营的项目来说,非常重要。

    二、接口测试的流程

      1、 项目启动后,测试人员要尽早找到开发人员拿到接口测试文档
      2、 获取接口测试文档后,就可以进行接口用例的编写和调试
      3、 接口用例编写调试完成后,部署到持续集成的测试环境中,
      4、 设定脚本运行频率,告警方式等基本参数,进行接口的日常监控
      5、 每日进行接口脚本的维护更新,接口异常的处理

    三、编写接口测试脚本

      大部分性能工具都可以用来进行接口测试,jmeter就是一个好用的性能测试工具,他也同样可以用来进行接口测试,jmeter比较适用于CGI、webservice、DB等类型的接口测试。下面以websevice api接口为例说明如何编写接口测试用例(本文侧重于接口测试平台的搭建,对于具体工具是使用只进行简单介绍,对于工具不了解的,可以自行百度):
    以下是我弄的一个简单的脚本。


    每个请求都加一个响应断言来判断是否达到期望。
    如果用命令来执行,也很简单:
    jmeter -n -t test.jmx -l test.jtl

    四、接口持续集成

    在这块卡了好久,主要是report展示。之前是不想再用其他工具(如:Ant, Maven ), 就想将jtl文件的报告展现出来,弄了很久没成功。最后还是向工具屈服,用的Ant来编译.
    主要是配置build.xml
    一个示例:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <project name="ant-jmeter-test" default="all" basedir=".">
        <tstamp>
            <format property="time" pattern="yyyyMMddhhmm" />
        </tstamp>
        <!-- 需要改成自己本地的 Jmeter 目录-->
        <property name="jmeter.home" value="F:\xxxxx\Jmeter" />
        <!-- jmeter生成jtl格式的结果报告的路径-->
        <property name="jmeter.result.jtl.dir" value="F:\xxxxx\resultLog\jtl" />
        <!-- jmeter生成html格式的结果报告的路径-->
        <property name="jmeter.result.html.dir" value="F:\xxxxx\resultLog\html" />
        <!-- 生成的报告的前缀->
        <property name="ReportName" value="TestReport" />
        <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" />
        <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html" />
    
        <target name="all">
            <antcall target="test" />
            <antcall target="report" />
        </target>
    
        <target name="test">
            <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
            <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
                <!-- 声明要运行的脚本。"*.jmx"指包含此目录下的所有jmeter脚本-->
                <testplans dir="D:\test_case_path" includes="*.jmx" />
            </jmeter>
        </target>
    
        <target name="report">
            <xslt in="${jmeter.result.jtlName}"
                  out="${jmeter.result.htmlName}"
                  style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl" />
    
            <!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 -->
            <copy todir="${jmeter.result.html.dir}">
                <fileset dir="${jmeter.home}/extras">
                    <include name="collapse.png" />
                    <include name="expand.png" />
                </fileset>
            </copy>
        </target>
    </project>
    

    Jenkins 上安装 “Publish performance test result report” ,“Publish HTML reports” 的插件,配置一下。
    运行。
    结果如下:


    如果加上一些并发,负载等,就是性能测试报告了。
    性能报告的曲线展示还没弄出来,有空再看看。

    补上性能测试报告:

    之前一直出了个错:

    Performance: Recording JMeter reports '**/*.jtl'
    Performance: no JMeter files matching '**/*.jtl' have been found. Has the report generated?. Setting Build to FAILURE
    Build step 'Publish Performance test result report' changed build result to FAILURE
    Finished: FAILURE
    

    导致结果出不来。后面在 Jmeter/bin 下将 jmeter.properties 中的:
    jmeter.save.saveservice.output_format=csv
    改成:
    jmeter.save.saveservice.output_format=xml

    结果就是这样的:


    展开全文
  • 围绕自动化测试开展持续集成本文不会介绍持续集成的概念、理论以及相关工具的用法,而是基于实际的项目案例,分享如何利用自动化测试保障持续集成的有效性,同时也借助持续集成提升自动化测试用例的价值。...
  • 持续集成与自动化测试持续集成与自动化测试持续集成与自动化测试持续集成与自动化测试持续集成与自动化测试持续集成与自动化测试持续集成与自动化测试持续集成与自动化测试持续集成与自动化测试持续集成与自动化测试
  • 本视频是java自动化测试项目的持续集成教程。持续集成(CI)是一种软件开发实践,它倡导团队开发成员协同工作,有需要的时候就对代码进行集成,不必要等到软件开发后期才开始集成。jenkins是一个CI工具。它可以根据...
  • 微服务架构下的自动化测试持续集成工具链
  • 客户端UI自动化测试是大多数测试团队的研究重点,本文介绍猫眼测试团队在猫眼iOS客户端实践的基于KIF的UI自动化测试持续集成过程。 一、测试框架的选择 iOSUI自动化测试框架有不少,其中UIAutomation是Apple早期...
  • 基于 KIF 的 iOS UI 自动化测试持续集成
  • 游戏项目中的自动化测试持续集成[4]软件测试完全自动化、重复的build和测试过程,这种过程每天运行多次,在极限编程中,我们把它称为:持续集成。为了更好的实行持续集成,像CruiseControl或者Anthill这样的开源...
  • 游戏项目中的自动化测试持续集成[2]软件测试代码功能测试会生成非常复杂的输出数据,比如游戏的图形渲染引擎,回归测试是唯一可行的自动化测试。以图形渲染引擎为例,所有图形测试以输出最终平台相关的图形文件为...
  • 游戏项目中的自动化测试持续集成[3]软件测试自动化测试可以看作在开发前期投入,在开发过程中赢利。大多数的代码修改,包括Bug修改,都可能会引入更多问题导致程序宕机。所以,理论上说,一旦代码有所改变,就必须...
  • 主要介绍了jenkins+python自动化测试持续集成教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 持续集成与自动化测试移动应用需要做持续集成与自动化测试吗?我想告诉大家的是,这事非常值得做。为什么呢?近5年来移动业务快速发展,市场也日趋成熟,但是移动应用的开发在大部分企业里还是采用传统的开发模式,...
  • SeleniumUI自动化测试持续集成演练 接口自动化测试持续集成演练 一、SeleniumUI自动化测试持续集成演练 Selenium自动化测试项目介绍 用例业务内容:测试百度网首页搜索关键词之后,跳转页面标题的正确性 python...

    在这里插入图片描述
    篇幅较长,要耐心阅读哦~

    基础知识简要回顾

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

    在这里插入图片描述

    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

    在这里插入图片描述

    最后: 可以关注公众号:伤心的辣条 ! 进去有许多资料共享!资料都是面试时面试官必问的知识点,也包括了很多测试行业常见知识,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

    如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!


    好文推荐

    转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!

    面试经:一线城市搬砖!又面软件测试岗,5000就知足了…

    面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…

    什么样的人适合从事软件测试工作?

    那个准点下班的人,比我先升职了…

    测试岗反复跳槽,跳着跳着就跳没了…

    展开全文
  • Docker + Jenkins + Gitlab + Pytest + Allure 接口自动化测试持续集成.zip
  • 持续集成与测试自动化软件测试一、背景我从毕业到现在,曾在大小不同的三个公司就职:有民营的、有外资的、也有上市公司。但以前大多都是做项目,从事软件开发工作,绝大部分公司对测试都不重视,即使有也没有成规模,...
  • 在此我们采用Jenkins实现自动化构建部署。Jenkins 是一个可扩展的持续集成引擎。 主要用于: 持续、自动地构建/测试软件项目。监控一些定时执行的任务。 Jenkins拥有的特性包括:易于安装-只要把jenkins.war部署到...
  • .wkpf,.wkpf1{ font-family:"微软雅黑"; font-size:13px; line-height:30px; text-decoration:none; color:#818183;}3364次浏览 评价:好中差
  • Jenkins+python自动化测试持续集成Jenkins+python自动化测试持续集成Jenkins下载安装跳过插件安装离线升级重启服务插件下载Jenkins部署项目 Jenkins+python自动化测试持续集成 Jenkins下载安装 Jenkins是一个...

    Jenkins+python自动化测试持续集成

    Jenkins下载与安装

    Jenkins是一个开源的软件项目,是基于java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。由于是基于java开发因此它也依赖java环境,安装之前需要先安装jdk,建议jdk1.8+,安装后配置java环境变量。安装jdk成功后,在cmd使用java -version可查看jdk版本信息。
    
    1. 下载地址:https://www.jenkins.io/zh/

    展开全文
  • 持续集成与自动化测试的实现.pptx
  • 基于Espresso和Dagger的自动化测试框架  测试框架可以使用Android推荐的Espresso. 模拟数据可以使用Dagger2, 一种依赖注入框架.Dagger2没有使用反射, 而是使用预生成代码, 提高执行速度.  基于Espresso和Dagger的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 93,522
精华内容 37,408
关键字:

自动化测试与持续集成