接口自动化测试框架(基于jmeter)
2023年8月23日发(作者:为你写首歌歌词)
天秀中关村一小-
接⼝⾃动化测试框架(基于jmeter)接⼝测试可以分为两部分:⼀是线上接⼝(⽣产环境)⾃动化测试,需要⾃动定时执⾏,每5分钟⾃动执⾏⼀次,相当于每5分钟就检查⼀遍线上的接⼝是否正常,有异常能够及时发现,不⾄于影响⽤户使⽤。⼆是测试环境的接⼝⾃动化测试,测试时机可以是1、功能开发完成并提测,检查⼀边测试环境的所有接⼝是否正常,有异常则需要解决后再正式介⼊测试。2、测试完成上线发版前,检查⼀边测试环境的所有接⼝是否正常,有异常则需要解决后再上线发版。jmeter是Apache的⼀个⽤java写成,⽤来做接⼝测试和压⼒测试的⼯具,有gui界⾯,因为是纯java的,所以可以跨平台使⽤(只要有java环境就可以),jmeter已经把做接⼝测试的各种⽅法封装的很完善稳定,所以我们可以直接⽤来做接⼝⾃动化测试,不需要⾃⼰再去封装各种请求、断⾔、结果处理等等⽅法。相当于把jmeter的脚本当作接⼝测试⽤例管理⼯具,在脚本⾥⾯把要测试的接⼝、断⾔都写好。基于jmeter做接⼝⾃动化框架包括以下⼏个部分:jmeter+jenkins+github+钉钉机器⼈+tomcat+shell脚本+java程序包含了这些功能后,⼏乎⼤部分都可以⾃动化,⼿⼯需要做的事情就只有第三步:写接⼝⽤例并推送到github步骤⼤致是这样:⽤jmeter写接⼝—推送到GitHub—jenkins定时⾃动执⾏测试(从GitHub拉取最新脚本—执⾏shell脚本—执⾏java代码,处理统计结果,发送报告)以下是框架具体步骤:⼀、多⼈协作就需要github来管理,在github新建仓库,⽤于存放jmx脚本⼆、每个测试⼈员需要下载sourcetree,在本地新建本地仓库,并关联github远程仓库三、将各⾃写好的jmx脚本放到本地仓库,提交并推送到github四、在服务器上部署jenkins1、配置git源代码管理,如果远程仓库是私有类型的,则需要配置证书或账号密码(每次构建测试时,jenkins都会检查远程仓库是否有更新脚本,有更新就拉最新的脚本来测试,这样也⽅便修改被测脚本)2、设置定时⾃动构建,下⾯是每天的8点到23点,每5分钟构建⼀次3、设置超时管理,为了不影响下⼀次构建4、配置要执⾏的shell脚本5、配置构建失败通知钉钉
五、在服务器配置tomcat环境(如果是win服务器,最好⽤服务的形式安装tomcat)------linux配置tomcat环境-----1、下载Core下的zip包,解压到linux的⽬录2、到bin⽬录下给和赋予chmod 777权限,或者给全部sh⽂件赋予最⾼权限chmod 777 *.sh注意:如果访问不成功,如果我们想在本机中检测是否已经成功部署,那么我们必须关掉Linux中的防⽕墙或者开放8080端⼝,我在这⾥采⽤开放端⼝的⽅法。4、⽤指令sh 停⽌tomcat的运⾏,继续进⾏后续操作5、查看防⽕墙是否开启:systemctl status firewalld未开启:Active: inactive (dead)已开启:Active: active (running)开启防⽕墙:systemctl start firewalld关闭防⽕墙:systemctl stop firewalld执⾏开机禁⽤防⽕墙⾃启命令 : systemctl disable e开放端⼝号:firewall-cmd --permanent --zone=public --add-port=8080/tcp(只能在防⽕墙开启的情况下开放端⼝)------windows配置tomcat环境-----1、下载安装程序
2、双击exe⽂件安装-选择jre⽬录-选择tomcat安装⽬录-选择端⼝(默认8080可修改)在tomcat/bin⽬录双击启动服务或者双击-start
3、不⽤配置环境变量,但是需要关闭win防⽕墙六、在服务器配置jmeter环境需要两个jmeter环境,jmeter1⽤来收集jtl结果和⽣成报告,不需要改参数。jmeter2需要收集xml⽇志,把jmeter/bin/ties⽂件在结尾新增参数_format=se_data=rData=tHeaders==seHeaders=true
七、shell脚本,包括以下⼏个步骤删除上次的测试结果在tomcat⽬录中新建index⽂件夹,⽤于存放本次测试结果挨个执⾏jmx脚本(每个脚本需要执⾏两次,第⼀次收集jtl结果和⽣成报告,第⼆次收集xml⽇志,将报告、xml⽇志⽂件放到tomcat的⽬录下)执⾏java程序⼋、java程序(框架核⼼),把写好的java代码打成⼀个可执⾏jar包,让shell来调⽤,需要包含以下功能1、⽤时间戳重命名index⽂件夹,保证每次的结果⽬录不会覆盖2、把xml⽇志⽂件cope到index下⾯3、统计fail接⼝数量4、收集fail接⼝的信息5、将信息写成html页⾯报告,并放到tomcat⽬录下,同时⽤同⼀个时间戳⽣成报告的url6、将测试结果的简要信息、报告的url、⽇志的url,调⽤钉钉机器⼈,发送到钉钉,并且艾特相关接⼝负责⼈,以下是相关代码依赖: a fastjson 1.2.58代码:import ject;import atus;import bleHttpResponse;import st;import Entity;import bleHttpClient;import ients;import Utils;import ption;class DingDingTools { private String WEBHOOK_TOKEN; DingDingTools(String token) { WEBHOOK_TOKEN = token; } private void send(String textMsg) throws IOException { CloseableHttpClient httpClient = Default(); HttpPost httpPost = new HttpPost(WEBHOOK_TOKEN); der("Content-Type", "application/json; charset=utf-8"); StringEntity se = new StringEntity(textMsg, "utf-8"); ity(se); CloseableHttpResponse response = e(httpPost); if (tusLine().getStatusCode() == _OK) { String result = ng(ity(), "utf-8"); n("发送钉钉消息成功 " + result); } else { n("发送钉钉消息失败"); } // 关闭 (); (); } //发送text格式的消息 void text(String mag, String[] atMobile, boolean isAtAll) throws IOException { JSONObject object = new JSONObject(); JSONObject object_text = new JSONObject(); JSONObject object_at = new JSONObject(); object_("content",mag); object_("atMobiles",atMobile); ("msgtype","text"); ("text",object_text); ("at",object_at); ("isAtAll",isAtAll); send(f(object)); } //发送link格式的消息 void link(String title, String text, String messageUrl, String picUrl) throws IOException { JSONObject object = new JSONObject(); JSONObject object_link = new JSONObject(); object_("text", text); object_("title", title); object_("picUrl", picUrl); object_("messageUrl", messageUrl); ("msgtype", "link"); ("link", object_link); send(f(object)); } //发送markdown格式的消息 void markdown(String title, String text, String atMobile, boolean isAtAll) throws IOException { JSONObject object = new JSONObject(); JSONObject object_markdown = new JSONObject(); JSONObject object_at = new JSONObject(); object_("title", title); object_("text", text); object_("atMobiles", atMobile); object_("isAtAll", isAtAll); ("msgtype", "markdown"); ("markdown", object_markdown); ("at", object_at); send(f(object)); } //整体跳转ActionCard类型 void actionCard(String title, String text, String singleTitle, String singleURL, int btnOrientation, int hideAvatar) throws IOException { JSONObject object = new JSONObject(); JSONObject object_actionCard = new JSONObject(); object_("title",title); object_("text",text); object_("hideAvatar",hideAvatar); object_("btnOrientation",btnOrientation); object_("singleTitle",singleTitle); object_("singleURL",singleURL); ("actionCard",object_actionCard); ("msgtype","actionCard"); send(f(object)); } //独⽴跳转ActionCard类型 JSONObject object = new JSONObject(); JSONObject object_actionCard1 = new JSONObject(); JSONObject object_btns1 = new JSONObject(); JSONObject object_btns2 = new JSONObject(); object_("title",btnsTitle1); object_("actionURL",actionURL1); object_("title",btnsTitle2); object_("actionURL",actionURL2); object_("title",title); object_("text",text); object_("hideAvatar",hideAvatar); object_("btnOrientation",btnOrientation); void actionCard1(String title, String text, String btnsTitle1, String btnsTitle2, String actionURL1, String actionURL2, int btnOrientation, int hideAvatar) throws IOE object_("btns","["+object_btns1+","+object_btns2+"]"); ("actionCard",object_actionCard1); ("msgtype","actionCard"); send(f(object)); } //FeedCard类型 void feedCard(String title1, String messageURL1, String picURL1, String title2, String messageURL2, String picURL2) throws IOException { JSONObject object = new JSONObject(); JSONObject object_feedCard = new JSONObject(); JSONObject object_link1 = new JSONObject(); JSONObject object_link2 = new JSONObject(); object_("title",title1); object_("messageURL",messageURL1); object_("picURL",picURL1); object_("title",title2); object_("messageURL",messageURL2); object_("picURL",picURL2); object_("links","["+object_link1+","+object_link2+"]"); ("feedCard",object_feedCard); ("msgtype","feedCard"); send(f(object)); }}7、将测试报告发邮件给相关⼈员,以下是相关代码依赖: s commons-email 1.5代码:import ttachment;import xception;import artEmail;import DateFormat;import ;import ;public class CommonsMail { public static void mail(String[] to, String[] cc, String[] path) throws EmailException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");// 定义时间格式 String time = (new Date());// 获取当前时间 MultiPartEmail multiPartEmail = new MultiPartEmail(); tName("");//邮件服务器地址 hentication(, Password);//发送邮件服务器账户密码 rset("UTF-8");//发送邮件的字符编码 //可不加 OnConnect(false);//开启SSL加密,可不加 rtTLSEnabled(false);//开启TLS加密,可不加 pPort(25);//端⼝可以不设置,默认25 ug(false);//调试模式 //发送邮件的地址 m(); ject("线上接⼝⾃动化测试报告");//主题 ("附件为 "+time+" 线上接⼝测试报告");//正⽂ for (String toList : to) { if (toList != null && ().length() > 0) { (toList);//接收邮件地址 } } for (String ccList : cc) { if (ccList != null && ().length() > 0) { (ccList);//抄送⼈地址 } } for (String pathList : path) { if (pathList != null && ().length() > 0) { EmailAttachment attachment = new EmailAttachment();//创建附件的对象 h(pathList);//设置附件内容 e("");// 邮件发送出去时附件名 (attachment);//添加附件 } } (); n("邮件发送成功!n" + "收件⼈:n" + ng(1) + "n" + "抄送⼈:n" + ng(1)); }}///钉钉通知消息效果测试报告的url页⾯⽇志url页⾯点击全部接⼝跳转的url报告(fail的接⼝需要标红)
移动短信申请qq号码的方法-