zoukankan      html  css  js  c++  java
  • Jenkins自动构建-部署-测试

    大概的思路:

    1.Jenkins拉取git代码,自动构建

    2.构建成功后,将程序/jar包上传到测试服务器,并在测试服务器执行部署脚本

    3.以上完成后,触发自动化测试,由jenkins中的另一个任务触发

    4.例如在一台jenkins 的slave上(windows)触发执行自动化测试脚本,测试完成后,将报告发送到Jenkins中设置的人员以及在jenkins中展示

    一。jenkins中的设置

    邮件通知的设置

    注:这里的Password不是邮箱的密码,而是邮箱的授权码,可以百度下怎么获取

    测试服务器的设置

    设置完毕后,可以点击test configuration进行测试,查看是否能连得到

     主工程的设置(需要构建的项目)

    参数化构建,通过提交的分支或者tag进行部署,当然也可以选择revision

    源码的配置

    构建脚本

    rm -rf ./dist
    rm -rf ./dist.zip
    npm install
    npm run build
    cd $WORKSPACE/
    echo "GIT_COMMIT: " > dist/git.txt
    echo $GIT_COMMIT >> dist/git.txt
    echo -e "
    GIT_URL: " >> dist/git.txt
    echo ${GIT_URL#*xxxxxx.com.cn} >> dist/git.txt
    
    zip -r dist.zip dist

    前端项目,通过npm进行打包,另外需要将当前的版本号打包进去

    构建完成后需要执行的内容

    归档成品,也可以不需要

    执行的另一个project,也就是执行自动化测试的project

     通过publish over  ssh将dist.zip传到我们的测试服务器并执行部署脚本,需要注意执行的脚本的权限问题

    自动化测试工程的设置

     

    指定在哪一台slave执行,windows是我创建的一台windows测试机

    源码我没有设置,因为只是临时搭建下,我直接把测试代码放在了测试机上,实际上,应该通过svn或者其他方式拉取到测试机上,每次执行自动化测试的时候拉取最新的测试代码

     执行自动化测试脚本

    jenkins中的报告展示,设置报告的路径

     设置邮件通知

    独立设置的收件人邮箱

    邮件的正文以及将日志和测试报告作为附件 

    二。测试代码

    和之前的思路也差不多,unittest、htmltestrunner这些

    新加的东西:将每个页面的元素都配置在一个py中,引入虫师的poium

    如果能通过name或者id定位到元素最好,xpath不是很稳定(前端布局修改时,xpath可能会造成变更)

    #coding:utf-8
    from poium import Page,PageElement,PageWait
    class loginPage(Page):
        userNameInput = PageElement(xpath = '//*[@id="app"]/div/div/form/div[1]/div/div[1]/input',timeout=5,describe='登录用户名输入框')
        passwordInput = PageElement(xpath = '//*[@id="app"]/div/div/form/div[2]/div/div[1]/input',timeout=5,describe='用户密码输入框')
        loginButton = PageElement(xpath = '//*[@id="app"]/div/div/form/div[3]/div/button',describe='登录按钮')
        showPWDButton = PageElement(xpath = '//*[@id="app"]/div/div/form/div[2]/div/span',describe='明密文切换按钮')

    判断case是否通过的方式,从检查特定元素是否存在改为,预设正常情况下的屏幕截图,和实际执行操作时的屏幕截图进行对比,通过相似度进行判断,相似度的设置需要自己斟酌下

    #coding:utf-8
    import os
    from PIL import Image
    import math
    import operator
    from functools import reduce
    
    def takeDiff(pic1,pic2):
        image1 = Image.open(pic1)
        image2 = Image.open(pic2)
        histogram1 = image1.histogram()
        histogram2 = image2.histogram()
        differ = math.sqrt(reduce(operator.add, list(map(lambda a, b: (a - b) ** 2, histogram1, histogram2))) / len(histogram1))
        if differ <19:
            return True
        else:
            return False

    将一个模块的用例放在一个py文件中(只是我的做法是这样)

    #coding:utf-8
    import unittest
    from selenium import webdriver
    from HTMLTestRunner_cn import HTMLTestRunner
    import time
    from common import common,base_page
    import os
    #截图存放位置
    spath = r'C:/python/BI_auto/screenshot/login'
    class LoginTest(unittest.TestCase):
        def setUp(self):
            self.driver = webdriver.Chrome()
            self.loginPage = base_page.loginPage(self.driver)
            self.homePage = base_page.homePage(self.driver)
            self.loginPage.get('xxxxxxx.com.cn/#/login')
            self.driver.maximize_window()
    
        def tearDown(self):
            self.driver.close()
    
        def add_img(self):
            self.imgs.append(self.driver.get_screenshot_as_base64())
            return True
    
        def cleanup(self):
            pass
    
        def test_login_03(self):
            u'''检查显示密码按钮'''
            try:
                self.loginPage.passwordInput = 'admin'
                self.loginPage.showPWDButton.click()
                time.sleep(3)
                self.driver.get_screenshot_as_file(spath + '点击显示密码按钮.png')
                #截图对比结果,如果差异值小于9则认为相同(admin密码明密文显示差异值在10)
                diffResult = common.takeDiff(spath + '点击显示密码按钮.png',r'C:/python/BI_auto/testPic/login_03.png')
                #删除用作对比时的截图
                os.remove(spath + '点击显示密码按钮.png')
                #self.assertEqual(diffResult,1,'点击显示密码按钮,密码没有变为明文')
                self.assertTrue(diffResult,'点击显示密码按钮,密码没有变为明文')
            except:
                #self.driver.get_screenshot_as_file(spath+'03_点击显示密码,密码没有变为明文.png')
                self.add_img()
                raise

    我设置的路径都是绝对路径,应该用相对路径

    对元素的操作完毕后,截图,和预设的图片进行对比,对比完成后将截图删除,再对比较结果进行判断

    如果相似度过低,则将现在的屏幕截图保存到报告中

    用例的执行统一放到all_test中

    #coding=utf-8
    import unittest
    import sys
    import os
    sys.path.append("/test_case")
    #添加test_case目录
    from testcase import login,importDB
    #import HTMLTestRunner
    from HTMLTestRunner_cn import HTMLTestRunner
    import time
    
    alltestnames = [login.LoginTest]
    # alltestnames = [login.LoginTest,
    #                 importDB.ImportDBTest
    #                 ]
    
    testunit = unittest.TestSuite()
    
    for test in  alltestnames:
        testunit.addTest(unittest.makeSuite(test))
    
    timestr = time.strftime("%Y-%m-%d-%H_%M_%S",time.localtime(time.time()))
    #filename = r'C:/python/BI_auto/report/'+timestr+ r'.html'
    filename = r'C:/workspace/bi_UI_auto/report/'+ r'newest.html'
    fp = open(filename,'wb')
    runner = HTMLTestRunner(
        stream=fp,
        title='BI测试报告',
        description='report',
        verbosity=2
    )
    runner.run(testunit)
    fp.close()
    print('执行完毕,报告路径:'+filename)

    一样,路径的问题需要自己再调整下,jenkins中自动化测试的project中需要做的也就是获取最新的测试代码(需要修改代码中的路径设置)然后执行这个all_test.py

    三。执行结果

    构建、部署、测试完毕后,会有邮件发送

    在jenkins中也能看到本次的报告

    执行失败的用例,点击显示截图能看到测试时的截图

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 校门外的树
    Java实现 蓝桥杯VIP 算法训练 统计单词个数
    Java实现 蓝桥杯VIP 算法训练 统计单词个数
    Java实现 蓝桥杯VIP 算法训练 开心的金明
    Java实现 蓝桥杯VIP 算法训练 开心的金明
    Java实现 蓝桥杯 算法训练 纪念品分组
    Java实现 蓝桥杯 算法训练 纪念品分组
    Java实现 蓝桥杯VIP 算法训练 校门外的树
    Java实现 蓝桥杯VIP 算法训练 统计单词个数
    Java实现 蓝桥杯VIP 算法训练 开心的金明
  • 原文地址:https://www.cnblogs.com/delete31/p/13534975.html
Copyright © 2011-2022 走看看