• # python3.6以上版本
    
    def get_bcc(inputStr: str) -> str:
        bcc = 0
        for i in inputStr.split(' '):
            bcc = bcc ^ int(i, 16)
        return f'{bcc:x}'
    
    
    def test():
        inputStr = "23 23 02 35 35 36 36 37 37 35 35 36 36 37 37 35 35 36 36 37 02 01 00 a1 13 0b 04 0b 1d 20 03 C8 01 00 00 00 00 00 00 35 35 36 36 37 37 35 35 36 36 37 37 35 35 36 36 37 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 00 02 32 00 64 af af 01 90 03 e8 13 88 13 88 7d 03 e8 28 60 28 60 01 f4 5a 7d 01 07 3b 5e 64 01 d4 a9 da 00 00 03 e8 80 01 7d 00 00 00 64 5a 00 00 13 88 00 00 00 32 28 60"
        assert get_bcc(inputStr) == "43"
    
    
  • 实在是百度不出来

    😂 你都百度了啥。。。。百度下 “python 循环导入” 吧

  • 一般很少这样用吧,pytest 就是单元测试,注意控制变量啊,我用 pytest-lazy-fixture 插件试了下好像可以,如果有更好的方式请告诉我🤔

    import pytest
    
    
    class Test_case123:
    
        @pytest.fixture(params=[pytest.lazy_fixture('get_x'),
                                pytest.lazy_fixture('get_y')])
        def param_info(self, request):
            return request.param
    
        @pytest.fixture
        def get_x(self):
            return self.__class__.x
    
        @pytest.fixture
        def get_y(self):
            return self.__class__.y
    
        def test_1(self):
            self.__class__.x = "希望小学"
    
        def test_2(self):
            self.__class__.y = "希望小学生"
    
        @pytest.mark.parametrize('z', [pytest.lazy_fixture('param_info')])
        def test_3(self, z):
            assert "希望" in z
    
  • 夜未央 at 2019年10月22日

    看见=号结尾一般就是 base64 编码😂

  • 我确实有每天定时跑线上冒烟的自动化脚本需求,但是目前云真机都太贵了,用不起用不起😂

  • sudo python3 setup.py install 试试

  • 有线耳机也有风险,看这个http://tieba.baidu.com/p/6133768735#

  • 首先就应该把外放的音量调到最低。。。

  • int 和 integer 的数据结构是不一样的,需要先进行转化

    select = jpype.java.lang.Integer(1)
    
  • 这是 base64 编码的图片数据,用 base64 去解码后就可以了

    import base64
    img_base64 = 'iVBORw0KGgoAAAANSUhEUgAAAKAAAABGCAMAAAB8DG+AAAAAP1BMVEUAAAA9fEB6uX1SkVVvrnIPThJPjlJ5uHwubTEcWx9TklZioWU1dDh3tno9fEA0czd3tnowbzMUUxcKSQ0xcDSd5F48AAAAAXRSTlMAQObYZgAAA0xJREFUeJzsmduO4yAMhm2qNu1Fm4u+/7uu0nDwESZAtb2IpdWMMsR8/NjGZOG000477bTTTjuty3D7h58f8x3PcIMbHe4/hNPX69XnNGx4OIUQpXG+HkKEEIJw1Y0HWbo5gNFRwDkKRjjqegSQLBemCChSQwEei0GxFzNyRABpwGPOmIIzTPHYhI/H44C7mdXKBjT4KGHwvU0upQaNuTk7YHocQnAGz6p7VY+uguV5yHB8SyfVvQaMt8dCWLOyf0FBvcUmNCCu9DmagHYFWOYDWqPWdUW+Cl7xXMJlGSGUHp0yyBVEIJVOBGH8lWbPOJ+c1xgEZUJxXCOoGDQOzG5Aq1NQe76h0X3ktYXy5a4NeKPwHGFMpzraC0dTQTABkycSo/f7HeD53AjD5XLpI0zrtgDTrpe/1PiYgpvd7zth5OsizAraSZge5fCPD1Jyoqo+NHsi4Md6AYEUWP9gyeyF70PI+ViSbc5mAXIY9iRBC9AIiCVGUa0ux2AhHOcTrQ1XDksO74D5DXqooFjfLEO79QJS44CQLsuSiRD52Sw8TOJDa5OA1TikA0kxAcDK4bz/vqfUbYSw0XlFBQWHzGFxjBS+T0rdbr2EWE0QUAqqvcx++H2pbMpxBVl0mROiraB5fZbvQVnOASY1OwILbz1Ej0+vNW7l+WzqbmFZXZDlwQDkParsaar+RwERXTWMVjGv5a+I/RKSS48zExdWaILYvJ7jKGMJJMcBkvJIoo/9saWhWSGOQVYnUPcjeTNp8Dlt5iRDYCkhZzJTP7+pSuc3EX0JxXC0P259jRCNdAcfkI9Dq9nm/td1FRMeXAWNIS2hUTw9CWlOMz5B2BT6/X5bfEBzsuoO/QIUAa/Xax2wVrve70JYtos0gqJftF25/iPf9Rr9OIAVFTNgbuL9OO+qvwgRcF+bisFWPiVAzE2p+2ZvWibAyuts4zQh/VKv38udzAihl9R5JqfIZhBHZ78iHjYrzS0GI6Brs3MFx25sfo8iQfRNzpenUz+VCdRdHVF8XWtO3yWfkavEYcVIpROxNfnY9Pn+YFnHZuD+L1MNwW8attPqtN+y8h9qv2khTCYc/PaorBvQSZLhr6PSegHdNJ6toB2D/wIAAP//DV8OoEXRcU8AAAAASUVORK5CYII='
    img_bin = base64.decodestring(img_base64)
    with open('base64.png', 'wb') as f:
        f.write(img_bin)
    
  • 分享一个去重 at 2019年05月30日

    我查了下 groupby 的思想,先排序后去重,是要快很多,但是分组有点浪费时间了,优化了下

    def test(l):
        n = []
        l.sort()
        repeat = None
        for e in l:
            if e != repeat:
                repeat = e
                n.append(e)
        return n
    

    然而速度还是比不上 set

  • 举个例子,比方说登录 testerhome 后,会在 cookie 中找到一个字段叫 remember_user_token 的,一看就是你的用户信息,然后找一个未登录的浏览器打开 testerhome 网站,F12 打开控制台输入 document.cookie="remember_user_token=xxx",刷新一下,你在这个浏览器上就已经登录了。

  • 运行之前,清除日志

    adb logcat -c
    

    运行之后,查看崩溃日志

    adb logcat -b crash
    

    仅供参考,没有实际操作过

  • 直接用抓包工具并发登陆,然后把 cookie 复制到浏览器上,不行吗?

  • com.njzx.care.activity.MainActivity 可能不是该应用的 MainActivity。例如输入 adb shell am start com.tencent.mobileqq/.activity.QQSettingSettingActivity 不会启动 QQ,因为设置相关的 Activity 不是 QQ 的 MainActivity。

    所以需要先在 androidmanifest.xml 中指定应用最先启动 Activity 是 com.njzx.care.activity.MainActivity 才行。具体格式如下:

    <activity
            android:name=".activity.MainActivity"
                    .......
              <intent-filter>
                    <action android:name="android.intent.action.MAIN"/>
                    <category android:name="android.intent.category.LAUNCHER"/>
             </intent-filter>
    </activity>
    
    

    另外也可以通过 monkey 的方式,无需 Activity 启动 app

    adb shell monkey -p com.tencent.mobileqq 1
    
  • 关于 Auditing Performance at 2019年03月15日

    有张图没加载出来。。。仔细一看是 markdown 写错了😂

  • 将 Rewrite Rule 中的"404"改成"404 Not Found"试试

  • gnirehtet 和 shadowsocks 我这里都运行成功了。
    我电脑是 win7,安装 shadowsocks 前需要先装 openssl,并且把安装路径加入环境变量才行。
    我理解的原理是:用 *** 让电脑作为服务器去发送和接收数据,然后通过 adb reverse 把得到的数据传到手机里。
    这种方式用来监听手机流量还是很方便的(不用 root 就很爽)

  • 强行去获取结果,也能获取,但是实际上,还不如楼上的用一个变量作为测试结果来的直白。

    # coding=utf-8
    import unittest
    
    
    def skip_if_fail_register(func, depend='test_1register'):
        def decorator(self):
            fail_register = depend in [fail[0]._testMethodName for fail in self._resultForDoCleanups.failures]
            test = unittest.skipIf(fail_register, '注册失败')(func)
            return test(self)
        return decorator
    
    
    class TestStringMethods(unittest.TestCase):
    
        def test_1register(self):
            print('注册账户')
    
        @user1r
        def test_2login(self):
            print('登录账户')
    
    if __name__ == '__main__':
        unittest.main()
    
  • python2 似乎也是同样的安装流程

  • 所以 4G 为什么会有问题?DNS 劫持?

  • requests.get('https://www.baidu.com', verify=False)
    
  • 重新定义 ADB 客户端 -- fa at 2018年12月18日

    加上--uninstall,可以再安装前提前卸载掉应用,避免覆盖安装失败的问题。

    。。。这里写错了吧,我看了源码,--force 才是先卸载再安装。

  • Python3 解析复杂结构的 json at 2018年12月12日

    尝试写了个函数,好像也能满足上面提到的场景。。。

    def analysis_json(json):
        if isinstance(json, list) and isinstance(json[0], dict):
            return analysis_json({x: list(map(lambda k: k[x], json)) for x in json[0]})
        elif isinstance(json, dict):
            return {x: analysis_json(json[x]) for x in json}
        else:
            return json
    
  • 是的,超时会判断为失败,这里超时通常是指建立 socket 连接时超时,原因有很多,最有可能是压测是 cpu 负载过高,可以同时多开几台机器试下。至于为什么失败时,name 的值没有带参数,可以看下 locust 的 clients.py 中的_send_request_safe_mode 方法,在请求失败后重新构造了一个 request 对象,用来打印失败信息,只传了 method、url 进去,没有传 params。