python + pytest +Git+request+ mysql + jenkins + allure + anyproxy + flask 自动化测试

1.自动化测例架构介绍

1.1 项目介绍

该项目使用python语言实现,基于pytest测试框架且集成Allure和Jenkins,使用阿里开元的代理工具AnyProxy获取接口信息,提交到Flask服务接口存入到mysql数据库,通过Jenkins拉取GitHub代码,并执行测试,最终输出Allure测试报告,并通过邮件发送给相关人员。

1.2 引入目的

减少回归测试的使用时间,提高效率,方便维护和事后追溯

2. 测试整体流程

2.1 开启代理AnyProxy抓取测试数据

2.1.1 配置AnyProxy略过,网上很多教程,也比较简单

  服务器可以参考:https://www.jianshu.com/p/e309d4edd9de

2.1.2 提供接收抓取数据的接口及数据库表结构创建

使用flask轻量级web框架,提供接收数据的接口

接收数据接口

CREATE TABLE `srm_cases` (

  `ID` int(11) unsigned NOT NULL AUTO_INCREMENT,

  `REQUEST_URL` varchar(500) NOT NULL DEFAULT '',

  `REQUEST_BODY` text,

  `REQUEST_METHOD` varchar(10) NOT NULL DEFAULT '',

  `CREATE_TIME` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

  `REQUEST_HEADERS` text,

  PRIMARY KEY (`ID`),

  UNIQUE KEY `REQUEST_URL` (`REQUEST_URL`)

) ENGINE=InnoDB AUTO_INCREMENT=436 DEFAULT CHARSET=utf8mb4 COMMENT='CREATE TABLE `srm_cases` (\n  `ID` int(11) unsigned NOT NULL,\n  `REQUEST_URL` varchar(200) DEFAULT NULL,\n  `REQUEST_BODY` text,\n  `REQUEST_METHOD` varchar(10) DEFAULT NULL,\n  `CREATE_TIME` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON CURRENT_TIMESTAMP,\n  PRIMARY KEY (`ID`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;';

数据库表信息

2.1.3 提供AnyProxy代理抓取过滤脚本

module.exports = {

    *beforeSendResponse(requestDetail, responseDetail) {

        if (requestDetail.url.indexOf('gbsdev.geekvape.cn/prod-api') != -1) {

            const newRequestOptions = requestDetail.requestOptions;

            var req_data = decodeURIComponent(requestDetail.requestData);

            var post_data={"requestUrl":requestDetail.url,"requestBody":req_data,"requestHeaders":newRequestOptions.headers,"requestMethod":newRequestOptions.method};

            // parse 为自己 server 路径

            let res = sendPostJsonHttpRequest(post_data, 'srm');

        }

    },

};

function sendPostJsonHttpRequest(body, route) {

    var http = require('http')

    var querystring = require('querystring');

    let options = {

        hostname: '127.0.0.1',

        port: 9999,

        path: '/' + route,

        method: 'POST',

        headers: {"content-type": 'application/json'}

    };

    var contents=JSON.stringify(body);

    var req = http.request(options, function(res){

    res.setEncoding('utf8');

    });

    req.write(contents);

    req.end();

};

function sendPostFormHttpRequest(body, route) {

    var http = require('http')

    var querystring = require('querystring');

    let options = {

        hostname: '127.0.0.1',

        port: 5001,

        path: '/' + route,

        method: 'POST',

        headers: {"content-type": 'application/x-www-form-urlencoded'}

    };

    var contents = querystring.stringify(body);

    var req = http.request(options, function(res){

    res.setEncoding('utf8');

    });

    req.write(contents);

    req.end();

};

json和from格式提交数据

2.1.4 启动抓取工作

windows 启动代理服务:  anyproxy -i -p 8001 -w 8002 -r D:\anyproxycrawljs\shop.js

linux 启动 : /usr/local/nodejs/node12/bin/anyproxy -i -p 8001 -w 8002 -r  /usr/local/nodejs/shop.js

MAC : anyproxy -i -p 8001 -w 8002 -r /Users/heavengifts/Desktop/nodejs/srm.js 

启动代理服务
设置当前的网络代理

代理UI页面地址: http://127.0.0.1:8002/

代理抓取中
主动提交到服务端
数据入库


2.2 Jenkins自动构建测试,输出测试报告

自动化项目
报告总览
详细报告

3. 具体代码实现

环境搭建 :服务端依赖环境搭建

3.1  封装RestClient,增加日志记录

        core -- >> rest_client

3.2  RequestBasic继承RestClient,使其适用本项目

        common -- >> basic_http

3.3  封装前置条件【破解验证码及登录】获取Authorization认证

        testcases -- >> conftest 

        common -- >> img_utils

3.4  配置mysql 线程池,读取配置文件数据

        common -- >> mysql_pool 

3.5  配置数据源,执行测试,发送邮件测试报告

        testcases -- >>api_test-- >> test_db_data_srm 

        testcases -- >> conftest                                      

3.6 查看测试测试报告

4. 代码GitHub地址:项目GitHub地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容