专栏首页测试邦谈谈测试服务化

谈谈测试服务化

在这信息爆炸、物欲横流的现实社会中人难免会浮躁,有很多测试同行会觉得测试没价值或者没太大价值,还经常会调侃自个只会点点点。冷静下来思考下真的没有价值吗?

看似都是点点点,为什么别人那样点就会发现比较关键的缺陷,我那样点却发现不了,这其实就是对测试人员基本功的考核(测试设计、测试策略等)。我们也是能从数据分析层面(发现缺陷数、缺陷类型、缺陷严重等级等)来对测试人员的基本功进行相对客观的考核与验证的。所以浮躁的时候是不是可以先思考下这些基本功我掌握扎实了吗?现在是该我浮躁的时间点吗?

当我们做到了哪里不对点哪里的时候的确是应该多去思考下如何更大程度去体现自己的价值,但切勿忘记的前置条件满足的重要性,别本末倒置了。

现在也是各种概念横飞的时代,5G、云计算、DevOps 等等,每天都充斥在我们耳边,我们在本职工作做好的情况下该选择哪个方向、从哪个点切入呢?

很多情况下之所以会有选择焦虑症其实在于不清楚自己想要什么,如果清楚了自己想要什么其实选择起来就简单了,回到我们最开始的话题,我们不是经常纠结于测试岗位的价值吗,所以我们的关注点其实就是价值体现,明确了想要的是这个,那么选择其实就简单了,不管是哪个方向,只要能更大的体现岗位的价值,whatever,都ok的。

做的东西如果使用的人多了自然价值就会变大,所以将测试服务化是个不错的尝试方向。测试服务化不但可以让测试自身使用比较便捷同时也可以让开发同学使用,乃至可以推广到更多的群体,运用范围广最后可以成为重要的基础的设施服务。

现在我们简单介绍下测试服务化的一个简单实践尝试。

1

安装OCR依赖的python库

我们就来简单介绍下如何将一个测试用的OCR封装成一个服务来使用。

会依赖到pytesseract和Pillow这两个库,我使用的是python 2.7的版本,可以执行如下命令进行库安装:

pip install  pytesseract Pillow

接着还需要安装tesseract,根据操作系统选择对应的安装方式,参照如下wiki链接进行安装

https://github.com/tesseract-ocr/tesseract/wiki

2

编码测试

现在编写个代码测试下是否可以从图片中提取出文字,代码如下:

try:
   from PIL import Image
except ImportError:
    import Image
import pytesseract
def ocr(filename):
    text = pytesseract.image_to_string(Image.open(filename))
    return text
print(ocr('a.png'))

准备如上代码里的png文件,然后执行下这个python文件看下是否能输出图片上的文字,如图片是这样的

执行完可以看大对于这种简单的图片还是可以成功提取出文字的,如下截图所示(这个库识别成功率不是很高):

3

测试服务化实施

上面的测试通过后为了让这个ocr测试服务让更多的人便捷的使用到可以考虑将这个功能封装成一个接口的形式,这样调用者和只需提供一张图片就可通过这个服务来获取图片上的文字。

可以借助Flask来搭建web服务,执行如下命令进行安装:

pip install Flask

封装如下测试服务来提取图片文字:

import os
from flask import Flask, render_template, request
try:
   from PIL import Image
except ImportError:
    import Image
import pytesseract
UPLOAD_FOLDER = '/static/uploads/'
ALLOWED_EXTENSIONS = set(['png', 'jpg', 'jpeg'])
app = Flask(__name__)
def allowed_file(filename):
    return '.' in filename and \
           filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
@app.route('/')
def home_page():
    return "Hello World!"
@app.route('/upload', methods=['GET', 'POST'])
def upload_page():
    if request.method == 'POST':
        file = request.files['file']
        if file.filename == '':
            return 'The file upload was not valid image!'
        if file and allowed_file(file.filename):
            text = pytesseract.image_to_string(Image.open(file.filename))
            return text
if __name__ == '__main__':
    app.run(debug=True,host='65.49.207.50',port=5000)

假如将这个文件命名为start.py,执行如命令即可启动这个测试服务:

python start.py

服务启动后,就可以通过curl指令上传个图片验证是否可以提取出文字了,curl指令如下:

curl http://65.49.207.50:5000/upload -F "file=@/mnt/c/Users/yangzw/Desktop/a.png"

查看如下返回是可以抽取出文字的:

到这里我们已经完成了这个小功能的测试服务化工作了,后续相关人员需要用到这个服务的话只需要调用下这个暴露出来的接口即可,无需什么其他依赖。

以上是对测试服务的一点小实践,实际的测试服务化业务逻辑会复杂不少,希望可以给你带来抛砖引玉的作用~

长得帅的的都会扫描关注如下微信公众号哦~

本文分享自微信公众号 - 测试邦(testerbang)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux 命令总结

    小闫同学啊
  • 并发篇-python多进程

    >>>Process([group [, target [, name [, args [, kwargs ] ] ] ] ])

    小团子
  • property、魔法方法和继承

    Python 中预先定义好了一些以 __xxx__ 形式的属性和方法。这些属性和方法用来表示特定的意义和功能。

    小闫同学啊
  • 并发篇-python进程

    >>> 并发是指,程序在运行的过程中存在多于一个的执行上下文。这些执行上下文一般对应着不同的调用栈。

    小团子
  • 并发篇-python传输模型

    主要提供序列化的、可靠的、不重复的数据,它可以将消息拆分成多个片段,确保每一条片段都顺利到达目的地,然后按照顺序组合在一起,最后将完整的消息传递给正在等...

    小团子
  • Jenkins(六)

    在流水线中使用Pyenv Pipeline插件提供的withPythonEnv方法

    zx钟
  • 协程小练习

    我们已经知道可以对list、tuple、str等类型的数据使用for...in...的循环语法从其中依次拿到数据进行使用,我们把这样的过程称为遍历,也叫迭代

    小闫同学啊
  • python协程回顾

    自动切换 from gevent import monkey; monkey.patch_all()

    小闫同学啊
  • 算法篇-python查找算法

    在汉诺塔游戏例子中,如果你需要移动的盘子很多时,程序运行就会消耗很长时间来计算结果。可以回顾下 —>算法篇-python递归算法

    小团子
  • GIL锁、深浅拷贝、模块导入和上下文管理器

    模块在搜索时,根据 sys 模块中定义的 path 变量中保存的路径进行搜索

    小闫同学啊

扫码关注云+社区

领取腾讯云代金券