最近学了点持续集成,自动化测试,mockserver。接口测试中用到了Jenkins,它是一个持续化继承的的引擎,持续集成的价值,就是提前发现问题,使得网站提前发现bug,这样就可以减少费用开支,减少风险,减少重复过程,等功能。
持续化集成的要素:
1.统一的代码库
2.自动构建
3.自动测试
4.每个人每天都要向代码库主干提交代码
5.每次代码递交后都会在持续集成服务器上触发一次构建
6.保证快速构建
7.模拟生产环境的自动测试
8.每个人都可以很容易的获取最新可执行的应用程序
9.每个人都清楚正在发生的状况
10.自动化的部署
其中还用到一些工具,postman,newman,这俩个工具是对开发人员请求网站时返回的数据可以清楚的查看。
然后就是Python测试的部分,用到unittest库,这个库可以用来测试用,和java中的测试基本一样。不过这个要对get,和post俩个http协议中的方法要了解点。
接下来就是mockserver了,开发过程中需要依赖一些接口,这些接口要么是搭建环境困难,要么是还没有实现,要么是交互比较复杂。这种情况下,使用mock server来mock这些接口,以便开发和测试能够正常进行。
这个工具算是挺强大可以自己构建数据,完全不用等到开发完了再去测试。
接下来就是flask框架,这是一个开发轻量级框架,其中flask-restful,则可以用来测试可以各种post,get,put,delete,不过里面有些不是那么好理解对于初学者,还贴点代码吧。恩恩还是能看懂的。
#coding: utf-8
from flask import Flask, request
from flask.ext.restful import reqparse, abort, Api, Resource
app = Flask(__name__)
api = Api(app)
POSTS = [
{},
{'title': 'first post', 'content': 'first post'},
{'title': 'last post', 'content': 'last post'},
{'title': 'how to learn interface test', 'content': 'how to learn interface test'}
]
def abort_if_post_doesnt_exist(post_id):
try:
POSTS[post_id]
except IndexError:
abort(404, message="POSTS doesn't exist")
parser = reqparse.RequestParser()
parser.add_argument('post', type=int)
class Post(Resource):
# /posts/1 GET
def get(self, post_id):
post_id = int(post_id)
abort_if_post_doesnt_exist(post_id)
return POSTS[post_id]
# /posts/1 DELETE
def delete(self, post_id):
post_id = int(post_id)
abort_if_post_doesnt_exist(post_id)
del POSTS[post_id]
return '', 204
# /posts/1 PUT
def put(self, post_id):
json_data = request.get_json(force=True)
post_id = int(post_id)
post = {'title': json_data['title'], 'content': json_data['content']}
POSTS[post_id] = post
return post, 201
class PostList(Resource):
# /posts GET
def get(self):
posts = []
for post in POSTS:
if post:
new_post = {}
new_post['url'] = '/posts/' + str(POSTS.index(post))
new_post['title'] = post['title']
posts.append(new_post)
return posts
# /posts POST
def post(self):
json_data = request.get_json(force=True)
post_id = len(POSTS)
POSTS.append({'title': json_data['title'], 'content': json_data['content']})
return POSTS[post_id], 201
api.add_resource(PostList, '/posts')
api.add_resource(Post, '/posts/')
if __name__ == '__main__':
app.run(debug=True)
的确挺强大的,peewee也在当中用到,他是方便delete后能有能get到不是下一个,当然操作过就知道了。嘻嘻
持续监控也是挺好用的通过jenkins来自动化监听,可以发到邮箱的奥。就这么多了。