基于SAAS化的架构下,特别是面对to B类型的产品,那么测试经常面对的就是如何来测试每个上层应用。其实在底层微服务共享的模式下,更多的关注底层的微服务的测试,而对于上层应用来说,只需要随机的选择一个使用产品活跃度高的用户来进行测试就可以了,从这个架构的模式下这样的测试思路是没有问题的,而且也是成立的。但是随着业务的扩张,就会有很多的集群,每个集群都是需要被测试和验证(后续在文章中详细的介绍SAAS化集群的容量规划,调度,计算和存储的验证思路),考虑到每个集群都是需要被验证,那么测试代码只有一套,不可能说面对多个集群而有多套代码,这样从成本来说它是非常不合理的。

基于一套代码,实现流水线的验证方案,针对每个流水线传不同的用户进行验证,具体的用户可以选择每个集群里面活跃度比较高用户来进行测试。正如前面说的,在SAAS化的模式下,底层服务它是共享的机制,但是每个集群它是不同的,这种不同在于它提供的DB层面和计算能力,因此需要被验证。使用Pyhton中的argparse可以实现与Jenkins中的参数化关联起来,这样建立一种机制后,我们只需要在参数化里面定义我们需要被验证的点来进行测试。如下代码:

#!/usr/bin/env python#!coding:utf-8import argparseimport  sysimport  jsonimport  requestsimport pytestdef getHeaders():return {'Content-Type':'application/json ;charset=utf-8'}def ciParameterize():'''结合CI系统形成参数化的构建,这个地方关联的是Jenkins参数化,是不能修改的'''parser=argparse.ArgumentParser()   parser.add_argument('param')   args=parser.parse_args()   param=vars(args)   v=dict()for key,value  in param.items():      v[key]=valuereturn v['param']def sendHello():   url='https://oapi.dingtalk.com/robot/send?access_token=00fe14445a5e307f2ff0914b1d3de083a390b3058d62c27ed50561298198bf9b'msg=ciParameterize()+'为您服务!'String_textMsg = {"msgtype": "text","text": {"content": msg},"at": {"atMobiles": ["134****5195"],"isAtAll": 0}}   String_textMsg=json.dumps(String_textMsg)   r = requests.post(url, data=String_textMsg, headers=getHeaders())return rif __name__ == '__main__':   sendHello()

这样结合Jenkins的参数化后,可以指定具体的用户来进行问好,如“无涯课堂为您服务!”或者说“XX为您服务!”,总的来说,这样指定的用户它是基于我们实际测试中可以随意指定的,而不需要单独的把它写死,因为写死是一种最差的解决方案。结合CI的参数化如下图所示:

然后在具体执行的层面直接调用param这个参数可以了,如下图所示:

这样构建的时候可以指定具体的参数来进行如下,如下图所示:

这样可以依据自己的业务需求,指定需要的用户进行执行,可以很轻松的和CI的参数化之间建立关系然后整合起来。

如果和Pytest整合起来后,我们会发现,如上的方式执行的时候,总是会提示错误的信息,这是因为在Pytest的测试框架中,它是有它自己内部的一套机制,我们可以结合它内部的命令行执行和Ci的参数化来进行整合,从而达到刚才的目的。创建conftest.py的文件,在里面添加命令行执行参数的代码:

#!/usr/bin/env python#!coding:utf-8import pytestimport argparsedef pytest_addoption(parser):'''添加pytest的自定义命令行参数'''parser.addoption('--cmdopt',action='store',default='无涯课堂',help='myoption: type1 or pyte2')@pytest.fixture()def getUser(request):'''参数处理成fixture'''return request.config.getoption('--cmdopt')

然后把模块名称修改为test_开头的模块名称,模块里面的源代码具体为:

#!/usr/bin/env python#!coding:utf-8import argparseimport  sysimport  jsonimport  requestsimport pytestdef getHeaders():return {'Content-Type':'application/json ;charset=utf-8'}def test_sendHello(getUser):   url='https://oapi.dingtalk.com/robot/send?access_token=00fe14445a5e307f2ff0914b1d3de083a390b3058d62c27ed50561298198bf9b'msg=getUser+'为您服务!'String_textMsg = {"msgtype": "text","text": {"content": msg},"at": {"atMobiles": ["134****5195"],"isAtAll": 0}}   String_textMsg=json.dumps(String_textMsg)   r = requests.post(url, data=String_textMsg, headers=getHeaders())return rif __name__ == '__main__':   pytest.main(["-s","-v","test_params.py"])

在CI中,修改执行的方式,具体如下:

这样修改后,可以很完美的把Pytest框架的命令行参数与Ci的参数整合起来,从而得到在SAAS化的架构下,对各个上层应用不同账户的验证,来达到校验各个集群的目的。感谢您的阅读和关注,后续会持续更新。

命令行_Pytest之命令行执行相关推荐

  1. linux命令行3d,Linux命令行快捷键

    总结一下: 1.移动光标: 1.1 行首 ctrl+a 1.2 行末 ctrl+e 1.3 前移一字符 ctrl+b (注:因为左边的内容先于右边输入 ,故向左为向前,向右为向后) 1.4 后移一字符 ...

  2. Linux 如何通过命令查看一个文件的某几行(中间几行或最后几行)

    linux 如何显示一个文件的某几行(中间几行) [一]从第3000行开始,显示1000行.即显示3000~3999行 cat filename | tail -n +3000 | head -n 1 ...

  3. 退出python命令行-退出python命令

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 在linux环境下退出python命令模式原创 2016年11月03日 ...

  4. 退出python命令行-在cmd命令行里进入和退出Python程序的方法

    在cmd命令行里进入和退出Python程序的方法 进入: 直接输入python即可,如图所示 退出: 1:输入exit(),回车 2:输入quit(),回车 3:输入ctrl+z,回车 以上这篇在cm ...

  5. uboot流程——命令行模式以及命令处理介绍

    [uboot] (第六章)uboot流程--命令行模式以及命令处理介绍 2016年11月14日 20:39:26 阅读数:4323 以下例子都以project X项目tiny210(s5pv210平台 ...

  6. linux sed给空文件首行插入_Sed命令高级功能,学好了工作不愁

    原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处. sed命令有两个空间,一个叫pattern space,一个叫hold space.这两个空间能够证明人类的脑瓜容量是非常 ...

  7. mysql的pager命令,mysql pager用法命令行命令

    下面讲的命令,有部分只能在linux上才有.像pager命令windows上就没有了. 分屏: 在Linux上,而且不是xwindow时,使用mysql命令行时,输出太多的东西,看不到就很悲剧了.在s ...

  8. python命令行工具_python命令行工具Click快速掌握

    前言 写 Python 的经常要写一些命令行工具,虽然标准库提供有命令行解析工具 Argparse,但是写起来非常麻烦,我很少会使用它.命令行工具中用起来最爽的就是 Click,它是 Flask 的团 ...

  9. ubuntu终端命令停止_从命令行关闭Linux计算机的5种方法

    没有操作系统是完美的. 即使相对稳定,驱动程序和应用程序也可能存在问题. Linux也不例外. 尽管比Windows更稳定(在许多情况下,并非全部!),但可能还需要重新启动Linux计算机. 这可能是 ...

  10. Linux中10个有用的命令行补齐命令

    本文由 极客范 - 踏雁寻花 翻译自 Balakrishnan Mariyappan.欢迎加入极客翻译小组,同我们一道翻译与分享.转载请参见文章末尾处的要求. 在Linux系统中,输入一个命令,再按两 ...

最新文章

  1. 用友Cell组件使用总结
  2. Android 动画之TranslateAnimation应用详解
  3. 5种网络IO模型:阻塞IO、非阻塞IO、异步IO、多路复用IO、信号驱动IO
  4. 2个oracle文件导入报错处理
  5. python初学 数据分叉情况下的函数递归
  6. define特殊用法
  7. iframe导致的IE6下https页面安全提示
  8. elt php,ELT(数据仓库技术) 学习
  9. 你是否适合当一个Java程序员?一文看清
  10. ubantu系统之快捷键使用
  11. win10卸载db2_如何在Linux下干净卸载db2数据库
  12. ABAP中分页控件的定义
  13. django的admin
  14. 【国产化电脑】如何有效避免违规外联
  15. java后端开发项目流程_Java项目——后端笔记
  16. 步进电机功率计算公式
  17. 详解Java中Comparable和Comparator接口的区别
  18. 微信企业号和企业微信消息发送区别
  19. 大数据早报:百度开源移动端深度学习框架 中国联通成立大数据公司(9.26)
  20. web概念介绍、软件架构、静态资源

热门文章

  1. 操作系统总结之 输入输出系统(下)
  2. 【题解】Luogu p3478 [POI2008]STA-Station 动态规划
  3. BZOJ 1078: [SCOI2008]斜堆
  4. 异步 Action 的定义
  5. AMD and CMD are dead之KMDjs内核之依赖分析
  6. 已知二叉树先序和中序,求后序。
  7. @Resource真的只是按名称来进行依赖注入吗?@Autowired真的只是按照类型来依赖注入吗?
  8. Redis内存淘汰策略及内存管理
  9. 2018-2019-1 20189218《Linux内核原理与分析》第二周作业
  10. 「镁客·请讲」ETC社区发起人邹来辉(Roy):我为什么要做ETC社区和狗狗币基金会?...