发布新日志

  • Jmeter对Json格式数据的三种处理方式

    2018-01-14 17:38:06


    https://www.jianshu.com/p/fe5b0d70b1b3

    Json 作为一种数据交换格式在网络开发,特别是 RESTful(Representational State Transfer)架构中应用得越来越广泛。Jmeter是一款很适合做接口和性能的测试工具,对于下面这一段Json 格式的响应报文我们可以在jmeter里面使用三种不同的方法来进行数据的抽取工作。

    {
    :   "code":"000000",
    :   "data":
    :   {
    :   :   "pageCount":"1",
    :   :   "prizeLists":
    :   :   [
    :   :   :   {
    :   :   :   :   "cellphoneNum":"134****0001",
    :   :   :   :   "prizeId":"1000005",
    :   :   :   :   "prizeName":"10元话费"
    :   :   :   },
    :   :   :   {
    :   :   :   :   "cellphoneNum":"134****0001",
    :   :   :   :   "prizeId":"1000007",
    :   :   :   :   "prizeName":"4元话费"
    :   :   :   }
    :   :   ],
    :   :   "totalCount":"2"
    :   },
    :   "msg":"成功"
    }
    

    1)使用正则表达式提取prizeName的第二个值
    在Sampler上面添加后置处理器-->正则表达式提取器,


    引用名称:其他地方引用提取值的变量名称,这里填写的是:prizeNameValue,具体的引用方式是${prizeNameValue}。
    正则表达式:提取内容的正则表达式【()表示提取,对于你要提前的内容需要用小括号括起来】。
    模板:用$$引用起来,如果在正则表达式中有多个提取表达式(多个括号括起来的部分),则可以是$1$,$2$等等,表示解析到的第几个值给prizeNameValue,正则表达式的提取模式,值从1开始,值0对应的是整个匹配的表达式。
    匹配数字(0代表随机):0代表随机,-1代表所有,其余正整数代表将在已提取的内容中第几个匹配的内容。这里需要提取的是第二个匹配的值。
    缺省值:正则匹配失败时取的值。
    可以在jmeter中添加Sampler -->Debug Sampler来看正则表达式的取值。


    从上图中可以看出提取到的prizeNameValue的值是4元话费。
    2)使用 JMeter 的插件JSONPath 来获取 JSON 数据中特定位置的数据
    在jmeter的plugins网站http://jmeter-plugins.org/downloads/all/ 选择 JMeterPlugins-ExtrasLibs-X.X.X.zip下载,解压以后将lib和lib/ext中的jar包放到jmeter安装目录对应位置,然后重启jmeter。
    在Sampler上面添加后置处理器-->jp@gc - JSON Path Extractor,


    在DebugSampler的结果中可以看到prizeNameJson的取值是4元话费。

    3)使用JMeter的BeanShell Post Processor来处理Json数据
    将fastjson.jar 拷贝到 jmeter lib 文件夹下后重启 jmeter
    在Sampler上面添加后置处理器-->BeanShell PostProcessor

    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    
    String json=prev.getResponseDataAsString();
    JSONObject jso = JSON.parseObject(json);
    JSONObject data = jso.getJSONObject("data");
    JSONArray prizeLists = data.getJSONArray("prizeLists");
    
    vars.put("prizeNameValue",prizeLists.getJSONObject(1).getString("prizeName"));
    

    在DebugSampler的结果中可以看到prizeNameValue的取值是4元话费。


    总结
      本文列举出了三种可用的从 Json 格式的返回值中提取数据的方法。正则表达式对于简单的 Json 格式数据的处理非常快速标准化,JsonPath 插件可以创建能够被维护的脚本,引入fastjson库的BeanShell 依赖于 Java 语言的灵活性可以进行进一步的开发。大家可以根据自己的习惯和喜好选择任意一种进行数据的提取。



    作者:道韫
    链接:https://www.jianshu.com/p/fe5b0d70b1b3
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • JMeter-Test Fragment

    2018-01-14 17:35:15

    不能直接执行,必须通过逻辑控制器中的Include_Controller 或者模块控制器来调用。添加下级组件的方法与线程组相同(可以简单理解为不能执行的线程组)。

    在模块化脚本构建中会很好用。比如:将登录脚本保存为一个Test Fragment, 然后就可以在其他所有需要登录的测试脚本中调用这个Test Fragment,而不需要在每个测试脚本中都再写一个登录过程。(特别是测试脚本多,而登录脚本有变动的时候,只需要修改登录的Test Fragment,大大减少工作量)

  • Jmeter:跨线程组传递参数

    2018-01-05 09:14:34

    http://blog.csdn.net/qq_35885203/article/details/77562644

    jmeter的线程组之间是相互独立的,各个线程组互不影响,所以线程组A中输出的参数,是无法直接在线程组B中被调用的。

    但是有时为了方便管理,我们可能是把各个接口单独存放在不同的线程组中。拿token来说,虽然每一个线程组中我们也可以在放一个登录请求,然后输出一个token供此线程组使用,但这样就比较繁琐且冗余。此时我们就可以使用跨线程组传递参数来解决这样的问题


    方法:jmeter本身的内置函数中,“__setProperty”函数可以把某参数的值设置成jmeter本身的内置属性,而jmeter的内置属性是所有线程组都可以调用的,是全局变量。各个线程组调用时,只需使用调用jmeter属性的函数“__P”来调用相应的属性即可。


    操作:以Token来示例,在登录请求中添加一个正则表达式提取器(上一章有说),提取响应值中的token的值。然后再添加一个 Bean Shell PostProcessor 的后置处理器,在这个处理器中调用“__setProperty”函数,设置正则提取到的token的值为全局变量。然后在另外一个线程组中添加一个其他需要用到此token的请求,通过函数“__P”来调用token。


    流程

    1.添加Bean Shell PostProcessor后置处理器




    2. Bean Shell PostProcessor操作面板

    Parametres:把需要操作的参数传递给Bean Shell PostProcessor。前面提取出来的Token的值,就把参数Token写入

    Script:  string Token=bsh.args[0];     把Bean Shell PostProcessor接收到的参数值,赋值给某参数。0是第一个值。

                     ${__setProperty(requestToken,${Token},)};        调用函数__setProperty,把Bean Shell PostProcessor中的参数Token的值赋值给requestToken,并设置requestToken为jmeter内置属性。




    3. 其他线程组调用Token的值





  • JMeter在代理模式下,上传文件失败

    2018-01-04 09:13:50

    1.在代理模式下,如果网页有上传文件的操作会失败,原因如下:

    Some browsers (e.g. Firefox and Opera) don't include the full name of a file when uploading files. This can cause the JMeter proxy server to fail. One solution is to ensure that any files to be uploaded are in the JMeter working directory, either by copying the files there or by starting JMeter in the directory containing the files.

    解决方法:

    将上传文件拷贝到jmeter/bin目录下上传即可

  • Jmeter的参数签名测试

    2018-01-02 22:34:21

    https://www.jianshu.com/p/240e929323a6

    简介

    参数签名可以保证开发的者的信息被冒用后,信息不会被泄露和受损。原因在于接入者和提供者都会对每一次的接口访问进行签名和验证。

    签名sign的方式是目前比较常用的方式。

    • 第1步:接入者把需求访问的接口的所有必要的参数信息(注意是所有参数),除去sign本身,以及值是空的参数,按参数名字母顺序排序。拼接成字符串

    • 第2步: 然后把排序后的参数按参数1值1参数2值2…参数n值n(这里的参数和值必须是传输参数的原始值,不能是经过处理的,的方式拼接成一个字符串。

    • 第3步: 把分配给接入方的验证密钥key(或者是提供者提供的一个SECRET_KEY,这个SECRET_KEY只有接入者和提供者知道)拼接在第2步得到的字符串前面。

    • 第4步:对加入密匙key的字符串进行加密或是摘要(用MD5或是SHA1摘要的比较多)

    • 第5步:对MD5的摘要结果转成大写然后写成字符串,传给参数sign

    举例:
    假设传输的数据是
    http://www.xxx.com/interface.aspx?sign=sign_value&p2=v2&p1=v1&method=cancel&p3=&pn=vn
    (实际情况最好是通过post方式发送),
    其中sign参数对应的sign_value就是签名的值。
    
    第一步,拼接字符串,首先去除sign参数本身,然后去除值是空的参数p3,
    剩下p2=v2&p1=v1&method=cancel&pn=vn,
    然后按参数名字符升序排序,method=cancel&p1=v1&p2=v2&pn=vn.
    
    第二步,然后做参数名和值的拼接,最后得到methodcancelp1v1p2v2pnvn
    
    第三步,在上面拼接得到的字符串前加上验证密钥key,我们假设是abc,
    得到新的字符串abcmethodcancelp1v1p2v2pnvn
    
    第四步,然后将这个字符串进行md5计算,假设得到的是abcdef,
    然后转为大写,得到ABCDEF这个值即为sign签名值。
    
    注意,计算md5之前请确保接口与接入方的字符串编码一致,
    如统一使用utf-8编码或者GBK编码,如果编码方式不一致则计算出来的签名会校验失败。
    服务器用密匙key对参数进行同样的MD5摘要算法,比对sign值
    

    MD5摘要

    MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。

    MD5算法具有以下特点:
    1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
    2、容易计算:从原数据计算出MD5值很容易。
    3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
    4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
    MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。除了MD5以外,其中比较有名的还有sha-1、RIPEMD以及Haval等

    jmeter的MD5摘要算法

    我的Jmeter3.2版本已经没有了_MD5这个函数了。
    所以要用MD5对参数进行摘要,我们需要自己导入MD5摘要算法的jar包

    用Eclipse编写一个java的MD5摘要算法的jar包

    image.png
    image.png
    image.png
    image.png

    MD5摘要算法在java中的编码
    LMFMD5.java

    package LMF.md5;
    
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    
    public class LMFMD5 {
        //创建一个类LMFMD5
        public String MD5(String sourceStr) {
            String result = "";
            try {
                MessageDigest md = MessageDigest.getInstance("MD5");
             // 生成一个MD5加密计算摘要
                md.update(sourceStr.getBytes());
             // 使用指定的byte数组更新摘要
                byte b[] = md.digest();
             // 把密文转换成十六进制的字符串形式
                int i;
                StringBuffer buf = new StringBuffer("");
                for (int ffset = 0; offset < b.length; offset++) {
                    i = b[offset];
                    if (i < 0)
                        i += 256;
                    if (i < 16)
                        buf.append("0");
                    buf.append(Integer.toHexString(i));
                }
                result = buf.toString();
                System.out.println("MD5(" + sourceStr + ",32) = " + result);
             //   System.out.println("MD5(" + sourceStr + ",16) = " + buf.toString().substring(8, 24));
                // 注释的是md5的16位取值
            } catch (NoSuchAlgorithmException e) {
                System.out.println(e);
            }
            return result;
        }
    }
    
    

    test.java(测试)

    package LMF.md5;
    import LMF.md5.LMFMD5;
    public class test {
        public static void main (String[] args) {
        String res = new LMFMD5().MD5("laimeifeng");
        System.out.println(res);
        }
    }
    

    把MD5摘要算法打包成jar包

    image.png
    image.png

    把MD5摘要算法的jar包放入jmeter的lib\ext目录里面里面

    image.png

    **Jmeter的BeanShell Sampler

    image.png

    Jmeter的查看MD5摘要算法结果

    image.png
    image.png
    image.png

    这样一个MD5摘要算法就成功加入到jmeter里面,可以进行MD5参数签名了。

    总结

    现在使用的接口有很大一部分是加密的,我们对这样的接口进行测试时,也需要传递加密的参数,来进行接口访问。



    作者:我为峰2014
    链接:https://www.jianshu.com/p/240e929323a6
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • Jmeter BeanShell 引用变量报错Error or number too big for integer

    2018-01-02 17:04:05

    http://www.bubuko.com/infodetail-2138759.html


    如果你通过CSV Data Set Config或者_StringFromFile函数来参数化你的请求,需要特别注意当参数为纯数字时,jmeter会默认将其识别成int型数据,说明jmeter并不是默认以String类型对数据进行读取的:范围-2147483648到2147483647,如果超出这个范围(例如2147483648这个数字):jmeter控制台则会抛出如下异常:jmeter.util.BeanShellInterpreter: Error invoking bsh method: eval    Parse error at line 14, column 181 : Error or number too big for integer type: 2147483648,如果要解决此问题,可在超出范围-2147483648到2147483647的数据前加上字母,或者使用beenshell进行参数化。

    注意:

    1、在BeenShell中引用外部参数需要以String类型的方式引用:例如:"${user}"(ps需要加上双引号)

    2、在BeenShell中引用文件路径时不要使用"\",否者会转义成ASCII码,当你需要表示完整的路径时应该如此表示:E:/TestSupplierInterFace/ZipUtil.java,而不是像java中引用E:\\TestSupplierInterFace\\ZipUtil.java,这样就会将T和Z分别转码成84和90然后jmeter控制台就会报错

  • jmeter md5 beanshell处理动态生成请求参数签名

    2018-01-02 16:34:57

    http://blog.hissummer.com/2017/01/jmeter-jsr223-beanshell%E5%A4%84%E7%90%86%E5%8A%A8%E6%80%81%E7%94%9F%E6%88%90%E8%AF%B7%E6%B1%82%E5%8F%82%E6%95%B0%E7%AD%BE%E5%90%8D%EF%BC%88%E4%BE%8B%E5%A6%82%E5%BE%AE%E4%BF%A1%E5%BC%80%E6%94%BEapi/

    import java.util.TreeMap;
    import java.util.Set;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Arrays;
    import java.security.MessageDigest;
    import java.math.BigInteger;
    import java.nio.charset.StandardCharsets;
    import java.nio.charset.Charset;
    import com.wjika.test.mymd5;
    import java.lang.String;
     
    //long requestTime = System.currentTimeMillis();
    String c_time="${__time(,)}";
    System.out.println(c_time);
    vars.put("current_time",c_time);
    String requestTime = c_time;
    // 原始请求参数定义
    //key1=value1&key2=&key3=value3    key2 为空将不会被作为签名的字符串并被舍弃请求。 具体请参见接口文档。
    // 此处会自动添加sign 参数,sign可以不填或者留空即可。
     
    String riginalparametersString = "app_version=5.0.1&bundleid=com.jy.gr&channel=799&current_time="+requestTime+"&imei=A10000563"+"&sign=&version=1.0&"+"mobile="+"${mobile}";
    String[] parameters = originalparametersString.split("&");
     
     
    log.info(originalparametersString);
     
    log.info(String.valueOf(parameters.length));
     
    TreeMap SortedParametersWithoutSign = new TreeMap();
     
     
    // 将参数按字母排序
     
    for(int i = 0 ; i < parameters.length ; i ++){
     
       String[] pandvalue  =  parameters[i].split("=");
       log.info(String.valueOf(pandvalue.length));
       if(pandvalue.length>1){
        
           String[] values = Arrays.copyOfRange(pandvalue, 1, pandvalue.length);
           log.info(String.valueOf(values.length));
           log.info(values[0]);
           if(!values[0].equals(""))
           SortedParametersWithoutSign.put(pandvalue[0],values[0]);
       }
       else{
           //SortedParametersWithoutSign.put(pandvalue[0],null);
       }
     
    }
     
    // 根据排序后的参数,组装参数。
     
    String requestParameters = "";
     
        Set set = SortedParametersWithoutSign.entrySet();
          Iterator iterator = set.iterator();
          int iterationcount = 0;
          while(iterator.hasNext()) {
     
              Map.Entry mentry = (Map.Entry)iterator.next();
              log.info("key: "+mentry.getKey()+"  ---- must:"+ mentry.getValue()   );
     
     //    if( mentry.getValue()[0].equals("Y") && !mentry.getKey().equals("sign") ){
     
                  if(iterationcount == 0)
     requestParameters += mentry.getValue();
     else requestParameters += mentry.getValue();
     
     iterationcount++;
     
     //    }
          }
     
     
    log.info(requestParameters);
     
    vars.put("requestParameters",requestParameters);

    String a=vars.get("requestParameters");

    StringBuilder stringBuilder = new StringBuilder(a);
    String signKey="jygdfgdfgdfgfdgddfgfdgo";
    String signRandom="bsdfsd34234234fsdfsdf82d";
    String sign = mymd5.getMd5(stringBuilder.append(signKey).toString()).concat(signRandom);
    System.out.println(sign);
    vars.put("sign", sign);


     
  • 使用Jmeter进行APP接口测试

    2017-12-25 23:10:27

  • Jmeter接口测试案例实践(一)

    2017-12-25 23:05:18

    https://www.cnblogs.com/leeboke/p/5227320.html
    以提取的员工号test和csv文件中读取的员工号进行对比,判断结果是否正确
  • APP常见测试点总结

    2017-12-03 09:17:44

    http://blog.csdn.net/gantao754246624/article/details/77985073@font-face { font-family: "宋体"; }@font-face { font-family: "Cambria Math"; }@font-face { font-family: "@宋体"; }@font-face { font-family: "Calibri"; }@font-face { font-family: "Cambria"; }@font-face { font-family: "Tahoma"; }p.MsoNormal, li.MsoNormal, div.MsoNormal { margin: 0cm 0cm 0.0001pt; text-align: justify; font-size: 10.5pt; font-family: Cambria; }.MsoChpDefault { font-size: 10pt; font-family: Calibri; }div.WordSection1 { }
  • Jmeter接口测试加解密及Bean Shell使用案例

    2017-11-29 22:52:35

  • 录制参数设置(HTML-based script和URL-based script的区别)

    2017-11-27 20:14:30

    http://www.51testing.com/html/32/365232-3485547.html


    选中HTML-based script模式后,点击HTML Advanced HTML按钮,进入HTML-based script的高级设置窗口界面。

    • 脚本类型中默认选择的是第一个,而用来描述用户行为的脚本,通常会采用该项。在这类脚本中,脚本的描述形式和用户的操作一致,能够非常直观地看到用户的操作流程。直接创建的URL(web_url)、表单提交(web_submit_form)、链接(web_link)和图像(web_image)等函数,产生的脚本非常直观。
    • 脚本类型的第二个选项仅包含明确的URL脚本。在这种脚本中,所有的链接、图像请求和URL操作都被录制为web_url函数,而表单提交则被录制为web_submit_data函数。这种模式在直观性上不如第一种,但是在某些情况下比较有用。例如,当一个站点中有很多链接具有相同的链接文本时,可以使用这种模式按照每个链接的URL将其列出,便于实现这些操作的参数化和关联
  • 浏览器渲染原理及web前端分析

    2017-11-27 09:51:27

    http://blog.csdn.net/yu1014745867/article/details/78518296

    浏览器的主要功能

    1. 用户界面:包括地址栏、后退/前进按钮、书签目录等,也就是除了用来显示你所请求页面的主窗口之外的其他部分。

    2. 浏览器引擎:用来查询及操作渲染引擎的接口。另外还用来操作浏览器的数据存储。

    3. 渲染引擎:用来显示请求的内容,例如,如果请求内容为html,它负责解析html及css,并将解析后的结果显示出来。

    4. 网络:用来完成网络调用,例如http请求,它具有平台无关的接口,可以在不同平台上工作。

    5. UI后端:用来绘制类似组合选择框及对话框等基本组件,具有不特定于某个平台的通用接口,底层使用操作系统的用户接口。

    6. JS解释器:用来解释执行JS代码。

    7. 数据存储:属于持久层,浏览器需要在硬盘中保存类似cookie的各种数据

    图:浏览器主要组件图

    浏览器渲染机制

    我们现在要在浏览器中显示以上结构的HTML:

    1.客户端浏览器开始从用户向服务器发出请求,服务器响应的将如上的HTML返回给请求的客户端浏览器中。

    2.加载从标签开始,并发现标签内有个外部样式文件要加载

    <link href="../css/css.css" rel="Stylesheet" type="text/css" />
    • 1

    3.这时客户端浏览器又向服务器发出一个请求加载css.css文件,服务器响应。

    4.此时客户端浏览器继续加载html文件里里的标签,在css.css文件加载完后,同时开始渲染页面。

    5.客户端浏览器在里的标签中发现一个标签并且引用了服务器进而的一张名为test.jpg的图片.客户端浏览器又向服务器发出一次请求。而浏览器不会因为此时正在加载标签里的图片而停止等待图片加载完,浏览器继续渲染还未完成的部分。

    6.标签里的图片加载完了,则要显示出来,同时图片会占有一定的面积,又会影响到后面的布局,浏览器不得不又回来重新渲染一次这部分。

    7.总算把body里的标签加载及渲染完后,浏览器又发现了一段代码:

    <script type="text/javascript" src="js/js.js"></script>
    • 1

    8.浏览器又立刻向服务器发出请求加载js.js文件,服务器响应。

    9.浏览器又在js.js文件中发现了一段代码是让

    标签隐藏的代码,此时浏览器又要重新去渲染被隐藏的
    部分。

    10.最后到浏览器发现了为止。

    参考资料:
    深入学习,偏底层(对于架构的理解更透彻)
    http://blog.csdn.net/findsafety/article/details/50424307

    WEB前端分析测试点

    12个测试要点

    优点:
    纯粹的前端视角,可以测试任何的网站,不需要考虑后台

    1.减少http请求的数量(把js,css合并),为了尽可能减少tcp链接的建立和释放连接的资源,减少读取资源读取IO的时间

    2.用好浏览器缓存,浏览器会把所有的访问记录保存在硬盘中,下次访问时会判断时候已保存,提升访问速度。

    3.利用gzip压缩机制,只针对文本类资源有效(js,css,html),文本的压缩比可以达到70%多。gif,png,等图片资源其实已经被压缩过了

    4.把CSS文件放在html的开头,让浏览器一开始把渲染资源下载下来,保证以后的页面渲染比较流畅。
    css主要用来渲染,当发现有css会优先下载下来,便于渲染。

    5.尽可能把js放在html的结尾,当页面渲染完成后,用户操作时候能达到动态的效果

    6.尽量避免css表达式,判断浏览器的版本,分辨率等表达式

    7.尽可能减少DNS查找,dns本身会消耗时间,尽可能使用相对路径。

    DNS作用:把域名解析成IP地址

    8.最好使用js压缩,比gzip更有针对性,js压缩并不是需要解压缩,而是压缩了以后js代码同样可以工作.

    eg.var username–> var u;
    把长的字符变成短的字符,同样适用于css,html

    9.尽量避免重定向redirect eg.访问www.baidu.com/
    /本身也是一种重定向,我们网页内部尽可能制定到某一个指定的地址,以减少资源

    10.去除重复的脚本,脚本重复太多会增大脚本的大小,消耗带宽资源
    如:加减法的函数,可以合并成一个操作函数

    11.使用ajax请求,局部某些数据会变化,需要什么内容只请求那一部分内容
    提升用户体验,节省很多网络传输的带宽成本。
    目前,我们用jQuery js的框架写ajax非常方便.

    12.使用CDN,内容分发网络。cdn不是从前端可控的技术,很大的缓存服务器
    减少总服务器的访问压力,提升用户的访问速度.

  • web编程中页面加载过慢是什么原因引起的?

    2017-11-24 10:14:30

    1、服务器端:检查服务器端的运行效率,看是否是后台运算效率不高导致响应过慢,这可以用日志和工具分析一下。
    2、传输过程:如果你用的窄带或者远程网络,尤其要注意,看看页面大小是否过大,是否有大的图片或js传输
    3、浏览器端:检查javascript运行效率,内存和cpu的占用情况。
    建议你先在ie下用IEwatch插件分析一下会更清楚一些
    内容多。

    使用了大的控件。

    代码未优化。

    网络问题。

    等等

  • jmeter进行https协议的测试

    2017-11-24 09:33:53

  • 在mac上通过Homebrew安装redis

    2017-11-13 16:54:00

    使用Homebrew安装redis可以减少大量的安装和配置的工作量。
    安装命令

    brew install redis


      ~ brew install redis
    Updating Homebrew...
    ==> Auto-updated Homebrew!
    Updated 1 tap (homebrew/core).
    ==> New Formulae
    csvkit                               e2tools                              just                                 simg2img
    dps8m                                heartbeat                            kaitai-struct-compiler
    ==> Updated Formulae
    imagemagick
                     faas-cli                      jenkins-lts                   node                          rtags
    abcmidi                       feh                           jruby                         node-build                    scalaenv
    alexjs                        ffmpeg@2.8                    kerl                          node@4                        scalastyle
    amazon-ecs-cli                filebeat                      kibana                        node@6                        scm-manager
    apibuilder-cli                firebase-cli                  knot-resolver                 ntl                           selenium-server-standalone
    app-engine-java               flow                          kobalt                        nuttcp                        simple-obfs
    aria2                         fluent-bit                    kubectx                       omniorb                       singular
    asciidoc                      fn                            kubernetes-cli                ompl                          sjk
    b2-tools                      frugal                        ldc                           openvdb                       solr
    babl                          gdcm                          libcue                        ortp                          source-to-image
    bash-snippets                 gegl                          libfabric                     packetbeat                    sourcekitten
    bazel                         getdns                        libfixbuf                     packetq                       ssdeep
    binaryen                      geth                          libgsf                        paket                         sslyze
    bit                           git-annex                     libmaxminddb                  pandoc                        svgo
    bluepill                      glide                         libogg                        pandoc-crossref               swiftformat
    buku                          gmic                          libpq                         pcl                           swiftlint
    certigo                       gmt                           libpqxx                       pdfcrack                      syncthing
    charm-tools                   gmt@4                         libuv                         pick                          telegraf
    chisel                        gnu-time                      logstash                      pipenv                        temporal_tables
    cimg                          gnupg                         logtalk                       poco                          terragrunt
    clojure                       go-jira                       mdds                          poppler                       tintin
    cmake                         gofabric8                     metricbeat                    postgresql                    typescript
    convox                        gradle                        mikutter                      postgresql@9.4                uncrustify
    couchdb                       grpc                          mingw-w64                     postgresql@9.5                vala
    cppad                         gsmartcontrol                 mitie                         postgresql@9.6                vapoursynth
    davix                         gtk+3                         monit                         pre-commit                    vtk
    debianutils                   hadoop                        mupdf                         prometheus                    wireguard-tools
    django-completion             hashcat                       mupdf-tools                   protobuf-swift                xmake
    docfx                         hive                          mypy                          pushpin                       yara
    docker-compose                i2p                           nanomsg                       py2cairo                      zabbix
    docker-compose-completion     imagemagick@6                 nativefier                    py3cairo                      zint
    doitlive                      immortal                      nco                           rabbitmq                      zurl
    dssim                         influxdb                      ncview                        rbenv-bundler
    elasticsearch                 inspircd                      neovim                        re2c
    erlang                        iron-functions                netcdf                        resty
    exploitdb                     jenkins                       nickle                        ringojs
    ==> Renamed Formulae
    newsbeuter -> newsboat
    ==> Deleted Formulae
    bchunk

    ==> Downloading https://homebrew.bintray.com/bottles/redis-4.0.2.sierra.bottle.1.tar.gz
    ######################################################################## 100.0%
    ==> Pouring redis-4.0.2.sierra.bottle.1.tar.gz
    ==> Caveats
    To have launchd start redis now and restart at login:
      brew services start redis
    Or, if you don't want/need a background service you can just run:
      redis-server /usr/local/etc/redis.conf
    ==> Summary
    🍺  /usr/local/Cellar/redis/4.0.2: 13 files, 2.8MB

      ~ pwd
    /Users/mac

      ~ cd /usr/local/Cellar/redis/4.0.2/bin
      bin ls
    redis-benchmark redis-check-aof redis-check-rdb redis-cli       redis-sentinel  redis-server
      bin ./redis-cli -h ceshi.my.com -p 6378 -a 密码

    ^C
      bin ./redis-cli -h ceshi.my.com -p 6379 -a 密码
    ceshi.my.com:6379> select 1
    OK
    ceshi.my.com:6379[1]> key reg_*
    (error) ERR unknown command 'key'
    ceshi.my.com:6379[1]> keys reg_*
    1) "reg_18515108600"
    2) "reg_18629081280"
    3) "reg_13620171113"
    4) "reg_13311111111"
    5) "reg_13232323232"
    ceshi.my.com:6379[1]> get reg_reg_18515108600
    (nil)
    ceshi.my.com:6379[1]> get reg_18515108600
    "877635"
    ceshi.my.com:6379[1]>
      bin pwd
    /usr/local/Cellar/redis/4.0.2/bin
      bin ./redis-cli -h ceshi.my.com -p 6379 -a password
    ceshi.my.com:6379> keys *
    '1) "PHP_java_api_sum"
    2) "PHP_Admin_Nav"
    3) "PHP_Admin_Node_All"
    4) "PHP_categorylist_level"
    5) "PHP_rbac_shop_redis_list"
    6) "PHP_java_api_method_sum"
    ceshi.my:6379> select 1
    OK
    ceshi.my.com:6379[1]> keys  *
       1) "3FED2D01D8A12A8AD4D3F350021DD47215058012181411198238304"
       2) "AE3E6F82854148CF32748D18E80ADE2D20170907164715876"
       3) "1090618090000000000"
       4) "after_sale_flow_status_111061508228501275_1"
       5) "AB704CCAD89A6917BA6D9AAD278BEEE315088370708211667596991"
       6) "5FFE8167AE474DEBF5892639EC2238A715054574645237655558901"
       7) "F71C1624C3CA1F23F5994C93C571572515084969572546594824039"
       8) "1080312030300000000"
       9) "1090424060000000000"


    要在Redis远程服务器上运行命令,需要通过客户端redis-cli连接到服务器

    语法

    [yiibai@ubuntu:~]$ redis-cli -h host -p port -a password

    Shell

    示例
    以下示例显示如何连接到Redis远程服务器,在主机(host)127.0.0.1,端口(port)6379上运行,并使用密码为 mypass

    [yiibai@ubuntu:~]$ redis-cli -h 127.0.0.1 -p 6379 -a "mypass" 
    redis 127.0.0.1:6379> 
    redis 127.0.0.1:6379> PING  
    PONG
    


     

  • mac安装Redis可视化工具-Redis Desktop Manager

    2017-11-13 10:50:38

    http://www.jianshu.com/p/214baa511f2e

    Redis Desktop Manager
    一款基于Qt5的跨平台Redis桌面管理软件
    支持: Windows 7+, Mac OS X 10.10+, Ubuntu 14+
    特点: C++ 编写,响应迅速,性能好。但不支持数据库备份与恢复。
    项目地址: https://github.com/uglide/RedisDesktopManager


    image

    安装方法

    • 安装brew cask : 在终端中输入下面语句 回车

      ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null ; brew install caskroom/cask/brew-cask 2> /dev/null

      可能会需要你的mac密码,输入即可

    • 安装Redis Desktop Manager
      安装完cask之后,在终端中输入 回车

      brew cask install rdm

    安装完成后


    Paste_Image.png

    打开rdm.app 连接redis数据库


    Paste_Image.png

  • mac怎么修改图片大小

    2017-10-23 14:44:47

  • 如何查看IOS的CRASH

    2017-10-17 16:27:39

    用户把设备连接到电脑上打开xcode-window-organizer,选中Devices-当前连接设备-Device Log,就可以查看所有当前设备的crash log,这个时候打开每一份crash的时候发现这些文件的部分地址都会被转换成类名方法名和行号等 

  • 抓包工具Charles乱码解决办法

    2017-10-17 09:28:48

    http://www.51testing.com/?87714/

    Mac 上的设置

    1. 在 Charles 的工具栏上点击设置按钮,选择 SSL Proxy Settings,选中 Enable SSL Proxying。(别急,选完先别关掉)

    2. SSL 选项卡的 Locations 里填写要抓包的域名和端口,点击 Add 按钮,在弹出的表单中 Host 填写域名。比如填api.instagram.com或者*,Port 填 443






1952/10<12345678910>
Open Toolbar