精华内容
下载资源
问答
  • 主要介绍了java实现钉钉机器人消息推送的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 钉钉机器人jar包

    2019-04-03 17:11:43
    钉钉发群消息(非机器人)jar 和例子, 好友阿里短信的jar(旧版)
  • 钉钉机器人消息封装——Golang 目前自定义机器人支持 文本(text) 链接(link) markdown ActionCard 整体跳转 独立跳转 FeedCard 添加钉钉群:35451012,执行dingtalk_test.go测试方法可直接查看以下消息内容。 ...
  • 主要介绍了基于java使用钉钉机器人向钉钉群推送消息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 通过go语言实现简单的发送钉钉自定义消息demo....................................................................
  • 实现钉钉机器人自动发送自定义信息到钉钉群,解压后查看”使用说明.doc“文档。
  • 参考官方文档:... jar包下载 /** *@param url 钉钉webhook * @param message 提示消息 */ public static void sendPost(String url, String message) { DingTalkClient client = new D...

    参考官方文档:https://developers.dingtalk.com/document/app/download-the-server-side-sdk

    jar包下载

    /**
    * @param url  钉钉webhook
    * @param message  提示消息      
    */
    
    public static void sendPost(String url, String message) {
            
            DingTalkClient client = new DefaultDingTalkClient(url);
            OapiRobotSendRequest request = new OapiRobotSendRequest();
            request.setMsgtype("text");  //3种,具体见官方文档
            OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
            text.setContent(message);
            request.setText(text);
            try {
                OapiRobotSendResponse response = client.execute(request);
                System.out.print(response);
            } catch (ApiException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
        } 
     /**
      * 
      * 外部接口调用
      * @param request
      * @param response
      * @throws ServletException
         * @throws IOException
     */
        @CrossOrigin(origins = "*", maxAge = 3600)
        @ResponseBody
        @RequestMapping(value = "dingNoticeTest", produces = "application/json;charset=UTF-8", method = {
                RequestMethod.POST })
        public void dingNoticeTest(HttpServletRequest request, HttpServletResponse response,@RequestBody String param)
                throws ServletException, IOException {
            request.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");    
            JSONObject js= JSONObject.fromObject(param);
            String content = "";
            if(js.has("content")){
                content = js.getString("content").replaceAll(" ", "");
            }
            JSONObject json = new JSONObject();            
            try {    
                //钉钉机器人
                sendPost(url,content);               
                json.put("status", "success");
                } catch (Exception e) {
                e.printStackTrace();            
                json.put("status", "failed");
            }
    
            PrintWriter pw = response.getWriter();
            String callback = request.getParameter("callback");
            if (null != callback && callback.length() > 0) {
                pw.print(callback + "(" + json.toString() + ")");
            } else {
                pw.print(json.toString());
            }
    
            pw.close();
        }


      

    展开全文
  • 2020年Java实现钉钉机器人

    千次阅读 2020-05-06 17:39:49
    钉钉机器人Java实现 获取自定义机器人webhook 钉钉机器人文档网址 钉钉里面新建群,在机器人管理页面选择“自定义”机器人,输入机器人名字并选择要发送消息的群。如果需要的话,可以为机器人设置一个头像。 ...

    钉钉机器人Java实现

    获取自定义机器人webhook

    1. 钉钉机器人文档网址

    2. 钉钉里面新建群,在机器人管理页面选择“自定义”机器人,输入机器人名字并选择要发送消息的群。如果需要的话,可以为机器人设置一个头像。

      https://ding-doc.oss-cn-beijing.aliyuncs.com/images/0.0.272/1571983069016-873ac5a2-fc5c-4281-bf85-48d02e05b9b6.png

    3. 最近钉钉更新了文档,在安全方面做了更好的处理,选择其中一种方式进行发送,代码会在下面的工具类中列举。
      在这里插入图片描述

    消息类型及数据格式

    本着要写成工具类的方法,所以把需要用到类型都写成实体类
    
    1. 文本类型

      TextRebootModel类
      @Data
      public class TextRebootModel {
          /**
           * 此消息类型为固定text
           */
          public String msgtype = "text";
      
          public ContentModel text;
      
          public AtMobiles at;
      }
      
      
      ContentModel类
      @Data
      public class ContentModel {
          /**
           * 消息内容
           */
          private String content;
      }
      
      
      AtMobiles类
      @Data
      public class AtMobiles {
      
          /**
           * 被@人的手机号
           * @return
           */
          private List<String> atMobiles;
      
          /**
           * @所有人时:true,否则为:false
           */
          private Boolean isAtAll;
      }
      
    2. MarkDown类型

      MarkDownRebootModel类型
      @Data
      public class MarkDownRebootModel {
          /**
           * 此消息类型为固定markdown
           */
          public String msgtype = "markdown";
      
          public MarkDownModel markdown;
      
          public AtMobiles at;
      }
      
      MarkDownModel类
      @Data
      public class MarkDownModel {
          /**
           * 首屏会话透出的展示内容
           */
          private String title;
      
          /**
           * markdown格式的消息
           */
          private String text;
      }
      

    钉钉机器人封装工具类方法

    public class RebootUtil {
    /**
         * 组装 发送的信息
         * Text版本
         * @param isAt       是否需要 @所有人
         * @param msgContent 要发送信息的主体
         * @param telList    要 @人的电话号码,如果@单独的几个人,就传一个空list,而不是 null
         * @return
         */
        public static String setMessage(boolean isAt, String msgContent, List<String> telList) {
    
            TextRebootModel model = new TextRebootModel();
            AtMobiles atMobiles = new AtMobiles();
            atMobiles.setIsAtAll(isAt);
            atMobiles.setAtMobiles(telList);
    
            ContentModel contentModel = new ContentModel();
            contentModel.setContent(msgContent);
    
            model.setAt(atMobiles);
            model.setText(contentModel);
    
            String toMsg = JSON.toJSONString(model);
    
            return toMsg;
        }
    
        /**
         * 组装 发送的信息
         * Markdown格式
         * @param isAt       是否需要 @所有人
         * @param title      标题
         * @param msgContent 要发送信息的主体
         * @param telList    要 @人的电话号码,如果@单独的几个人,就传一个空list,而不是 null
         * @return
         */
        public static String setMarkDown(boolean isAt, String title, String msgContent, List<String> telList) {
    
            MarkDownRebootModel model = new MarkDownRebootModel();
            AtMobiles atMobiles = new AtMobiles();
            atMobiles.setIsAtAll(isAt);
            atMobiles.setAtMobiles(telList);
    
            MarkDownModel markDownModel = new MarkDownModel();
            markDownModel.setTitle(title);
            markDownModel.setText(msgContent);
    
            model.setAt(atMobiles);
            model.setMarkdown(markDownModel);
    
            String Message = JSON.toJSONString(model);
    
            return Message;
        }
    
        /**
         * post 请求,发送给哪一个机器人
         *
         * @param reboot  机器人的token
         * @param message 发送的消息
         * @return
         */
        public static String sendPost(String reboot, String message) {
            CloseableHttpClient httpclient = HttpClients.createDefault();
            HttpPost httppost = new HttpPost(reboot);
            httppost.addHeader("Content-Type", "application/json; charset=utf-8");
    
            String textMsg = message;
            StringEntity se = new StringEntity(textMsg, "utf-8");
            httppost.setEntity(se);
            String result = null;
            HttpResponse response = null;
            try {
                response = httpclient.execute(httppost);
                if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                    result = EntityUtils.toString(response.getEntity(), "utf-8");
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    httpclient.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return result;
        }
      
        /**
         * 选择加签方式下的加签方法
         * @param secret 密钥,机器人安全设置页面,加签一栏下面显示的SEC开头的字符串
         * @return
         */
        public static Map<String, String> dingDingSec(String secret) throws Exception {
            Long timestamp = System.currentTimeMillis();
            String stringToSign = timestamp + "\n" + secret;
            Mac mac = Mac.getInstance("HmacSHA256");
            mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
            byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
            String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
            Map<String, String> map = new HashMap();
            map.put("sign", sign);
            map.put("timestamp", timestamp.toString());
            return map;
        }
      
        /**
         * 加签机器人实现,这里需要注意的是:timestamp和sign需要保持一致
         *
         * @param message 要发送的信息
         * @return
         * @throws Exception
         */
        public static String sendReboot(String message) throws Exception {
            Map<String,String> map=dingDingSec("钉钉机器人的SEC");
            String sign = map.get("sign");
            String timestamp = map.get("timestamp");
            StringBuffer stringBuffer = new StringBuffer();
            String robotUrl =stringBuffer.append(“钉钉机器人的webhook”).append("&timestamp=").append(timestamp).append("&sign=").append(sign).toString();
            return sendPost(robotUrl, message);
        }
        
        /**
         * 关键字机器人:发送消息中需要有对应的关键字才能发送成功
         * @param message 封装的消息
         * @return
         * @throws Exception
         */
        public static String sendKeyReboot(String message) throws Exception {
            return sendPost("钉钉机器人的webhook", message);
        }
    }
    
    
    
    public static void main(String[] args) {
    //text类型的消息:
    String text=RebootUtil.setMessage(true,"我就是我,  @1825718XXXX 是不一样的烟火",Arrays.asList(""));
    
    //markDown类型的消息:使用于字体加粗,超链接隐藏
    String markDown=RebootUtil.setMarkDown(true,"杭州天气","#### 杭州天气  \n > 9度,@1825718XXXX 西北风1级,空气良89,相对温度73%\n\n > ![screenshot](http://i01.lw.aliimg.com/media/lALPBbCc1ZhJGIvNAkzNBLA_1200_588.png)\n  > ###### 10点20分发布 [天气](http://www.thinkpage.cn/)",Arrays.asList(""));
    
      //钉钉机器人推送
      try {
                String message = RebootUtil.setMessage(false, "测试", Arrays.asList(""));
                RebootUtil.sendReboot(message);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    

    总结

    ​ 钉钉调用机器人还是比较简单的,在一些统计数据方面可以有效的集成开发。

    ​ 本文中的2个IDEA插件GsonFormat和Lombok还是挺方便的,详细安装方法可以查看文章

    展开全文
  • java调用钉钉机器人

    2021-05-31 18:02:49
    调用钉钉的sdk实现机器人消息推送 作为一名程序员,自己的代码报错的时候 自己应该第一时间知道的 一、适用场景 1.项目报警业务、阈值提醒、及服务down掉的时候等各种消息通知,根据自己的需求而定。 二、实现步骤...

    调用钉钉的sdk实现机器人消息推送

    	作为一名程序员,自己的代码报错的时候 自己应该第一时间知道的
    

    一、适用场景
    1.项目报警业务、阈值提醒、及服务down掉的时候等各种消息通知,根据自己的需求而定。

    二、实现步骤
    1.1:创建钉钉群、添加机器人 机器人选择自定义
    选择自定义
    1.2:根据自己的业务进行配置
    在这里插入图片描述
    1.3:添加机器人成功 这里要记住accessToken 后续用到
    在这里插入图片描述
    2.1前往官网下载sdk:https://developers.dingtalk.com/document/app/download-the-server-side-sdk
    2.2把下载下来的jar打包进maven仓库
    使用mvn命令

    mvn install:install-file  
    项目包名 
    -DgroupId=com.dingtalk.open
    工程名 
    -DartifactId=taobao-sdk-java-auto  
    版本号
    -Dversion=1.0
     包的形式(pom、jar、war)
    -Dpackaging=jar 
    包所在的路径
    -Dfile="E:\work\java文件\taobao-sdk-java-auto.jar"
    

    使用cmd合并执行

    mvn install:install-file  -DgroupId=com.dingtalk.open -DartifactId=taobao-sdk-java-auto   -Dversion=1.0  -Dpackaging=jar  -Dfile="E:\work\java文件\taobao-sdk-java-auto.jar"
    

    2.3完成上述步骤后,pom导入依赖

    	<dependency>
    			<groupId>com.dingtalk.open</groupId>
    			<artifactId>taobao-sdk-java-auto</artifactId>
    			<version>1.0</version>
    		</dependency>
    

    调用机器人工具类

    /**
     * @author Mr.li
     * @date 2021/5/31 17:02
     */
    public class DingDingUtil {
        public static void pushDingDingTalk(String accessToken){
            try {
                String sign=appendSign();
                String dingdingUrl="https://oapi.dingtalk.com/robot/send?access_token="+accessToken;
                String url=dingdingUrl+sign;
                DingTalkClient client = new DefaultDingTalkClient(url);
                OapiRobotSendRequest request = new OapiRobotSendRequest();
                request.setMsgtype("text");
                OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
                text.setContent("输入内容");
                request.setText(text);
                OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
                at.setAtMobiles(Arrays.asList("13263125227"));
                request.setAt(at);
    
                request.setMsgtype("link");
                OapiRobotSendRequest.Link link = new OapiRobotSendRequest.Link();
                link.setMessageUrl("https://www.dingtalk.com/");
                link.setPicUrl("");
                link.setTitle("输入标题");
                link.setText("");
                request.setLink(link);
                // 设置信息类型
                request.setMsgtype("markdown");
                OapiRobotSendRequest.Markdown markdown = new OapiRobotSendRequest.Markdown();
                markdown.setTitle("打手哥");
                markdown.setText("打手您好: 您的代码永无bug");
                request.setMarkdown(markdown);
                OapiRobotSendResponse response = client.execute(request);
            }catch (Exception e){
                throw new RuntimeException(e.getMessage());
            }
        }
        private static String appendSign(){
            try{
                Long timestamp = System.currentTimeMillis();
                String secret = "this is secret";
    
                String stringToSign = timestamp + "\n" + secret;
                Mac mac = Mac.getInstance("HmacSHA256");
                mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
                byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
                String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)),"UTF-8");
                System.out.println(sign);
                return "&timestamp="+timestamp+"&sign="+sign;
            }catch (Exception e){
                throw new RuntimeException(e.getMessage());
            }
        }
    }
    

    调用成功!
    在这里插入图片描述

    展开全文
  • 实现钉钉机器人自动发送自定义信息到钉钉群(对应源码)
  • dingding-robot:钉钉机器人相关sdk
  • 1.utils目录下新建DingDingUtil类package utils;import com.alibaba.fastjson.JSONObject;import org.apache....import restclient.RestClient;import java.text.NumberFormat;imp...

    1.utils目录下新建DingDingUtil类

    package utils;

    import com.alibaba.fastjson.JSONObject;

    import org.apache.http.client.methods.CloseableHttpResponse;

    import restclient.RestClient;

    import java.text.NumberFormat;

    import java.util.HashMap;

    /**

    *钉钉机器人工具类

    */

    public class DingDingUtil {

    //通过钉钉机器人发送消息到钉钉群中

    public static void sendVal(String url,String context)throws Exception{

    HashMap headermap = new HashMap<>();

    headermap.put("Content-Type","application/json");

    String entityString ="{'msgtype': 'text', 'text': {'content': '"+context+"'}}";

    RestClient restClient = new RestClient();

    CloseableHttpResponse closeableHttpResponse = restClient.post(url,entityString,headermap);

    JSONObject responseJson = restClient.getResponseJson(closeableHttpResponse);

    }

    //folat数字转换为百分号格式

    public static String folatToPer(float folatNum){

    NumberFormat numberFormat = NumberFormat.getPercentInstance();

    String per=null;

    try {

    numberFormat.setMaximumFractionDigits(2); //精确到2位

    per = numberFormat.format(folatNum);

    ReportUtil.log("小数点数字转百分数字符串:" + folatNum + " 转为 " + per);

    } catch (Exception e) {

    e.printStackTrace();

    }

    return per;

    }

    public static void main(String[] args) {

    String c=DingDingUtil.folatToPer((float) 5/7);

    System.out.println(c);

    }

    }

    RestClient类引用请参考下面这篇文章

    https://blog.csdn.net/weixin_42884654/article/details/94634905

    2.utils目录下新建ReportUtil类,增加日志记录

    package utils;

    import org.testng.Reporter;

    import java.text.SimpleDateFormat;

    import java.util.Calendar;

    import java.util.Date;

    /**

    *测试报告日志输出工具类

    */

    public class ReportUtil {

    private static String splitTimeAndMsg = "---";

    public static void log(String msg) {

    long timeMillis = Calendar.getInstance().getTimeInMillis();

    //TODO 日志记录

    // LoggerUtil.infoData(msg);

    //获取当前系统时间

    long currentTime = System.currentTimeMillis();

    SimpleDateFormat formatter = new SimpleDateFormat("yyyy年-MM月dd日-HH时mm分ss秒");

    Date date = new Date(currentTime);

    System.out.println(formatter.format(date));

    Reporter.log(formatter.format(date) + splitTimeAndMsg + msg, true);

    }

    }

    3.钉钉上添加钉钉机器人,保存webhook

    4.config目录下ExtentTestNGIReporterListener类,增加钉钉机器人配置

    package config;

    import com.aventstack.extentreports.reporter.configuration.Theme;

    import org.testng.*;

    import org.testng.xml.XmlSuite;

    import java.io.File;

    import java.util.*;

    import com.aventstack.extentreports.ExtentReports;

    import com.aventstack.extentreports.ExtentTest;

    import com.aventstack.extentreports.ResourceCDN;

    import com.aventstack.extentreports.Status;

    import com.aventstack.extentreports.model.TestAttribute;

    import com.aventstack.extentreports.reporter.ExtentHtmlReporter;

    import com.aventstack.extentreports.reporter.configuration.ChartLocation;

    import utils.DingDingUtil;

    import utils.ReportUtil;

    /**

    * 测试报告模板.

    */

    public class ExtentTestNGIReporterListener implements IReporter {

    //生成的路径以及文件名

    private static final String OUTPUT_FOLDER = "test-output/";

    private static final String FILE_NAME = "index.html";

    private ExtentReports extent;

    @Override

    public void generateReport(List xmlSuites, List suites, String outputDirectory) {

    init();

    //统计suite下的成功、失败、跳过和总的用例数

    int suiteSize=0;

    int suiteFailSize=0;

    int suitePassSize=0;

    int suiteSkipSize=0;

    boolean createSuiteNode = false;

    if(suites.size()>1){

    createSuiteNode=true;

    }

    for (ISuite suite : suites) {

    Map result = suite.getResults();

    //如果suite里面没有任何用例,直接跳过,不在报告里生成

    if(result.size()==0){

    continue;

    }

    ExtentTest suiteTest=null;

    //存在多个suite的情况下,在报告中将同一个一个suite的测试结果归为一类,创建一级节点。

    if(createSuiteNode){

    suiteTest = extent.createTest(suite.getName()).assignCategory(suite.getName());

    }

    boolean createSuiteResultNode = false;

    if(result.size()>=1){

    createSuiteResultNode=true;

    }

    for (ISuiteResult r : result.values()) {

    ExtentTest resultNode;

    ITestContext context = r.getTestContext();

    if(createSuiteResultNode){

    //没有创建suite的情况下,将在SuiteResult的创建为一级节点,否则创建为suite的一个子节点。

    if( null == suiteTest){

    resultNode = extent.createTest(r.getTestContext().getName());

    }else{

    resultNode = suiteTest.createNode(r.getTestContext().getName());

    }

    }else{

    resultNode = suiteTest;

    }

    if(resultNode != null){

    resultNode.getModel().setName(suite.getName()+" : "+r.getTestContext().getName());

    if(resultNode.getModel().hasCategory()){

    resultNode.assignCategory(r.getTestContext().getName());

    }else{

    resultNode.assignCategory(suite.getName(),r.getTestContext().getName());

    }

    resultNode.getModel().setStartTime(r.getTestContext().getStartDate());

    resultNode.getModel().setEndTime(r.getTestContext().getEndDate());

    //统计SuiteResult下的数据

    int passSize = r.getTestContext().getPassedTests().size();

    int failSize = r.getTestContext().getFailedTests().size();

    int skipSize = r.getTestContext().getSkippedTests().size();

    suitePassSize += passSize;

    suiteFailSize += failSize;

    suiteSkipSize += skipSize;

    if(failSize>0){

    resultNode.getModel().setStatus(Status.FAIL);

    }

    resultNode.getModel().setDescription(String.format("Pass: %s ; Fail: %s ; Skip: %s ;",passSize,failSize,skipSize));

    }

    buildTestNodes(resultNode,context.getFailedTests(), Status.FAIL);

    buildTestNodes(resultNode,context.getSkippedTests(), Status.SKIP);

    buildTestNodes(resultNode,context.getPassedTests(), Status.PASS);

    }

    if(suiteTest!= null){

    suiteTest.getModel().setDescription(String.format("Pass: %s ; Fail: %s ; Skip: %s ;",suitePassSize,suiteFailSize,suiteSkipSize));

    if(suiteFailSize>0){

    suiteTest.getModel().setStatus(Status.FAIL);

    }

    }

    }

    // for (String s : Reporter.getOutput()) {

    // extent.setTestRunnerOutput(s);

    // }

    extent.flush();

    suiteSize = suiteFailSize + suitePassSize + suiteSkipSize;

    //新加钉钉机器人测试报告

    String pass= DingDingUtil.folatToPer((float)suitePassSize/suiteSize);

    String url ="https://oapi.dingtalk.com/robot/send?access_token=457d8eb62b4f0b1e5781f3862c0b9e77ab21f";

    String context="此次运行接口用例,总用例数为:"+suiteSize+";通过:"+suitePassSize+";失败:"+suiteFailSize+";跳过:"+suiteSkipSize+";通过率为:"+pass;

    try {

    DingDingUtil.sendVal(url,context);

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    private void init() {

    //文件夹不存在的话进行创建

    File reportDir= new File(OUTPUT_FOLDER);

    if(!reportDir.exists()&& !reportDir .isDirectory()){

    reportDir.mkdir();

    }

    ExtentHtmlReporter htmlReporter = new ExtentHtmlReporter(OUTPUT_FOLDER + FILE_NAME);

    htmlReporter.config().setDocumentTitle("秀场-接口自动化测试报告");

    htmlReporter.config().setReportName("秀场-接口自动化测试报告");

    htmlReporter.config().setChartVisibilityOnOpen(true);

    htmlReporter.config().setTestViewChartLocation(ChartLocation.TOP);

    //设置报告背景颜色

    htmlReporter.config().setTheme(Theme.DARK);

    htmlReporter.config().setResourceCDN(ResourceCDN.EXTENTREPORTS);

    htmlReporter.config().setCSS(".node.level-1 ul{ display:none;} .node.level-1.active ul{display:block;}");

    extent = new ExtentReports();

    extent.attachReporter(htmlReporter);

    extent.setReportUsesManualConfiguration(true);

    // 设置系统信息

    Properties properties = System.getProperties();

    // extent.setSystemInfo("os.name",properties.getProperty("os.name","未知"));

    // extent.setSystemInfo("os.arch",properties.getProperty("os.arch","未知"));

    // extent.setSystemInfo("os.version",properties.getProperty("os.version","未知"));

    // extent.setSystemInfo("java.version",properties.getProperty("java.version","未知"));

    // extent.setSystemInfo("java.home",properties.getProperty("java.home","未知"));

    // extent.setSystemInfo("user.name",properties.getProperty("user.name","未知"));

    // extent.setSystemInfo("user.dir",properties.getProperty("user.dir","未知"));

    // 设置自定义配置信息

    Map systemmap = new HashMap<>();

    MySystemInfo mySystemInfo = new MySystemInfo();

    systemmap = mySystemInfo.getSystemInfo();

    for (Map.Entry entry:

    systemmap.entrySet()) {

    extent.setSystemInfo(entry.getKey(),entry.getValue());

    }

    }

    private void buildTestNodes(ExtentTest extenttest, IResultMap tests, Status status) {

    //存在父节点时,获取父节点的标签

    String[] categories=new String[0];

    if(extenttest != null ){

    List categoryList = extenttest.getModel().getCategoryContext().getAll();

    categories = new String[categoryList.size()];

    for(int index=0;index

    categories[index] = categoryList.get(index).getName();

    }

    }

    ExtentTest test;

    if (tests.size() > 0) {

    //调整用例排序,按时间排序

    Set treeSet = new TreeSet(new Comparator() {

    @Override

    public int compare(ITestResult o1, ITestResult o2) {

    return o1.getStartMillis()

    }

    });

    treeSet.addAll(tests.getAllResults());

    for (ITestResult result : treeSet) {

    Object[] parameters = result.getParameters();

    String name="";

    //如果有参数,则使用参数的toString组合代替报告中的name

    for(Object param:parameters){

    name+=param.toString();

    }

    if(name.length()>0){

    if(name.length()>50){

    name= name.substring(0,49)+"...";

    }

    }else{

    name = result.getMethod().getMethodName();

    }

    if(extenttest==null){

    test = extent.createTest(name);

    }else{

    //作为子节点进行创建时,设置同父节点的标签一致,便于报告检索。

    test = extenttest.createNode(name).assignCategory(categories);

    }

    //test.getModel().setDescription(description.toString());

    //test = extent.createTest(result.getMethod().getMethodName());

    for (String group : result.getMethod().getGroups())

    test.assignCategory(group);

    List outputList = Reporter.getOutput(result);

    for(String output:outputList){

    //将用例的log输出报告中

    // test.debug(output);

    test.debug(output.replaceAll("",">"));

    }

    if (result.getThrowable() != null) {

    test.log(status, result.getThrowable());

    }

    else {

    test.log(status, "Test " + status.toString().toLowerCase() + "ed");

    }

    test.getModel().setStartTime(getTime(result.getStartMillis()));

    test.getModel().setEndTime(getTime(result.getEndMillis()));

    }

    }

    }

    private Date getTime(long millis) {

    Calendar calendar = Calendar.getInstance();

    calendar.setTimeInMillis(millis);

    return calendar.getTime();

    }

    }

    增加部分如下图:

    3466cfa770e1a4f6e262654cf7e4a0cd.png

    5.使用testng里的xml文件执行test,钉钉机器人发送测试结果

    9e09608037c8aa4c91d0746a9c9b5506.png

    2f620a073415b5c2ab902b50509c72e1.png

    展开全文
  • 钉钉机器人工具类

    2021-03-09 23:36:31
    工作经常用到钉钉的机器人通知,写了几次机器人的工具类,不过忘记记录了,要重新写有点麻烦,这里把钉钉机器人的工具代码贴出来,后续再次用的时候直接查看。经常用到的地方:应用内存在异常情况报警,应用内任务...
  • 钉钉机器人自动发送消息,自动定时,自动周期,配置多个群机器人,配置多个消息模版,执行记录自动保存日志
  • java实现钉钉机器人消息推送

    万次阅读 热门讨论 2019-03-29 18:02:28
    先建个钉钉群,并加好机器人 此时,机器人已经添加完毕,接下来编写我们连接机器人小哥的代码 import com.alibaba.fastjson.JSON; import com.google.common.collect.Lists; import ...
  • 钉钉机器人:https://blog.csdn.net/java_zyq/article/details/84586317
  • Java操作钉钉机器人

    2021-04-22 14:57:50
    一、添加钉钉机器人 1、在群设置 > 智能群助手 > 添加机器人 2、我们可以对机器人做出三个限制,包括:自定义关键词、加签、IP限制。而我这里使用自定义关键词,也就是只有包含设定关键词的才能正常发送消息...
  • java实现钉钉通过机器人发送通知,传入信息调用即可,附jar
  • JAVA 实现调用钉钉机器人发送信息

    千次阅读 2020-12-17 18:39:07
    JAVA 实现调用钉钉机器人发送信息 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录JAVA 实现调用钉钉机器人发送信息前言一、钉钉群设置1、创建群2、选择智能群助手3、进行添加机器人...
  • 学习java实现钉钉机器人消息推送的示例代码,在这里,小哥,插入图片,机器人,通知学习java实现钉钉机器人消息推送的示例代码易采站长站,站长之家为您整理了学习java实现钉钉机器人消息推送的示例代码的相关内容。...
  • 钉钉机器人通报Java报错

    千次阅读 2020-01-31 09:26:06
    1、申请钉钉机器人 首先打开钉钉,随便创建一个群,也可以是统一的工作群点击群设置-智能群助手-添加机器人 选择一款机器人,这里选择自定义机器人 设置你的机器人名称和安全设置,Webhook即后面需要的url 这里以...
  • 1.钉钉测试方法 import java.net.URLEncoder; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.crypto.Mac; import javax.crypto.spec....
  • 前言有研究pinpoint的网友...1、接入微信群聊(已实现)2、接入钉钉群聊(正在进行)3、实现pinpoint告警接口(待完成)新建钉钉机器人登录钉钉网页:https://im.dingtalk.com登录说明文档地址,以备随时查询:https://...
  • 2.选择自定义机器人 3.配置机器人信息(安全设置自选配置) 4.完成机器人配置(webhook发送地址) 上代码 配置依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson&...
  • 下图是 java 线程池几个相关类的继承结构: 先简单说说这个继承结构,Executor 位于最顶层,也是最简单的,就一个 execute(Runnable runnable) ... Java并发指南12:深度解读 java 线程池设计思想及源码实现 ​深度解读 ...
  • 钉钉机器人发送图片

    2021-12-24 13:39:22
    钉钉机器人发送图片 钉钉自定义机器人发送图片 钉钉webhook机器人发送图片 钉钉智能群助手发送图片 2021-12-24 钉钉wekhook就是一个简单的post请求 headers001 = {'Content-Type': 'application/json'} ...
  • java使用钉钉机器人推送钉钉消息工具类 首先在pom.xml文件中添加依赖,也可以到钉钉官网下载 <!-- 2021-10-19 钉钉对接机器人 --> <dependency> <groupId>com.aliyun</groupId> <...
  • Android手机监听短信并根据指定规则转发到其他手机,钉钉机器人,企业微信群机器人,邮箱,树皮,webhook等 :warning:此项目在的基础上优化改造而来,感谢原作者! 特别声明: 本仓库发布的SmsForwarder项目中涉及...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,488
精华内容 595
关键字:

钉钉机器人java

java 订阅