1、参与 Appium 文档翻译计划
https://www.kancloud.cn/testerhome/appium_docs_cn
https://github.com/testerhome/appium/commit/8e4810fe335284e3df97ec855b663431232915aa
2、荣获 2 项政府荣誉
3、当选省技术委员会委员
4、入选中山市双领域专家

  • 软测副业 at November 10, 2025

    需要先单位推荐你去申报,盖公章。

  • 还真被我找到了,我百度网盘发给你。
    通过网盘分享的文件:QCC_AIRTEST_PROJECTS.rar
    链接: https://pan.baidu.com/s/1OzuWTyA5Rg22pQYy9o-FIg?pwd=nssf 提取码: nssf,你尽快下载,1 天有效期。

  • python: 更新版

    # smart_scan_upload.py —— 扫码上传助手
    import os, socket, qrcode, cgi, urllib.parse, shutil, datetime
    from http.server import HTTPServer, BaseHTTPRequestHandler
    from pathlib import Path
    
    UPLOAD_DIR = "uploads"
    DOWNLOAD_DIR = "to_phone"
    os.makedirs(UPLOAD_DIR, exist_ok=True)
    os.makedirs(DOWNLOAD_DIR, exist_ok=True)
    
    class Handler(BaseHTTPRequestHandler):
        def log_message(self, *args): pass
        def send_html(self, html, status=200):
            self.send_response(status)
            self.send_header("Content-type", "text/html; charset=utf-8")
            self.end_headers()
            self.wfile.write(html.encode('utf-8'))
    
        def do_GET(self):
            if self.path == '/':
                self.send_html('''
                <meta name="viewport" content="width=device-width">
                <h2>🚀 扫码助手</h2>
                <a href="/upload" style="display:block;margin:15px;padding:12px;background:#007AFF;color:white;text-decoration:none;border-radius:8px;">📤 上传文件</a>
                <a href="/download" style="display:block;margin:15px;padding:12px;background:#34C759;color:white;text-decoration:none;border-radius:8px;">📥 下载PC文件</a>
                <button onclick="let m=prompt('输入文字消息');m&&fetch('/text',{method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded'},body:'c='+encodeURIComponent(m)}).then(()=>alert('✅ 已发送'))" style="margin:15px;padding:12px;background:#FF9500;color:white;border:none;border-radius:8px;">💬 发文字</button>
                ''')
            elif self.path == '/upload':
                self.send_html(f'''
                <meta name="viewport" content="width=device-width">
                <h2>📤 上传文件</h2>
                <form method="post" enctype="multipart/form-data" action="/upload">
                    <input type="file" name="files" multiple required><br><br>
                    <button type="submit" style="padding:10px 20px;background:#007AFF;color:white;border:none;border-radius:6px;">上传</button>
                </form>
                <a href="/">← 返回</a>
                ''')
            elif self.path == '/download':
                files = [f.name for f in Path(DOWNLOAD_DIR).iterdir() if f.is_file()]
                links = ''.join(f'<li><a href="/f/{urllib.parse.quote(f)}">{f}</a></li>' for f in sorted(files))
                self.send_html(f'''
                <meta name="viewport" content="width=device-width">
                <h2>📥 下载文件</h2>
                <p>把文件放进电脑的 <code>{DOWNLOAD_DIR}</code> 文件夹即可下载。</p>
                <ul>{links or "<li>暂无文件</li>"}</ul>
                <a href="/">← 返回</a>
                ''')
            elif self.path.startswith('/f/'):
                fname = urllib.parse.unquote(self.path[3:])
                path = os.path.join(DOWNLOAD_DIR, os.path.basename(fname))
                if os.path.exists(path):
                    self.send_response(200)
                    self.send_header("Content-Disposition", f'attachment; filename="{os.path.basename(path)}"')
                    self.end_headers()
                    with open(path, 'rb') as f: shutil.copyfileobj(f, self.wfile)
                else:
                    self.send_error(404)
            else:
                self.send_error(404)
    
        def do_POST(self):
            if self.path == '/upload':
                form = cgi.FieldStorage(fp=self.rfile, headers=self.headers, environ={'REQUEST_METHOD': 'POST'})
                files = form['files']
                if not isinstance(files, list): files = [files]
                for f in files:
                    if f.filename:
                        name = os.path.basename(f.filename)
                        base, ext = os.path.splitext(name)
                        counter = 1
                        save_path = os.path.join(UPLOAD_DIR, name)
                        while os.path.exists(save_path):
                            save_path = os.path.join(UPLOAD_DIR, f"{base}_{counter}{ext}")
                            counter += 1
                        with open(save_path, 'wb') as out: out.write(f.file.read())
                        print(f"📥 已保存: {save_path}")
                self.send_html('<h3 style="color:green">✅ 上传成功!</h3><script>setTimeout(()=>location="/",2000)</script>')
            elif self.path == '/text':
                length = int(self.headers.get('Content-Length', 0))
                body = self.rfile.read(length).decode()
                msg = urllib.parse.parse_qs(body).get('c', [''])[0]
                if msg.strip():
                    with open(os.path.join(UPLOAD_DIR, "messages.txt"), "a", encoding="utf-8") as log:
                        log.write(f"[{datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] {msg}\n")
                    print(f"💬 收到文字: {msg}")
                    self.send_html('<h3>✅ 文字已接收!</h3>')
                else:
                    self.send_error(400)
    
    def get_ip():
        try:
            s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
            s.connect(("8.8.8.8", 80))
            ip = s.getsockname()[0]
            s.close()
            return ip
        except: return "127.0.0.1"
    
    if __name__ == "__main__":
        import sys
        port = 8081
        ip = get_ip()
        url = f"http://{ip}:{port}"
    
        print("🚀 扫码上传助手已启动!")
        print(f"📁 文件保存在当前目录的 'uploads' 文件夹")
        print(f"📤 想让手机下载PC文件?把文件放进 'to_phone' 文件夹\n")
    
        qr = qrcode.QRCode(); qr.add_data(url); qr.print_ascii(invert=True)
        print(f"\n🌐 手机扫码地址: {url}\n")
        print("⏳ 等待上传...(按 Ctrl+C 停止)\n")
    
        HTTPServer(('', port), Handler).serve_forever()
    
  • 已经好久不用了,等以后工作上需要我再单独写吧。

  • 软测副业 at October 20, 2025

    我说一个副业,做政府项目评审。
    正常去评审一个政府项目,是半天时间,劳务费是 500 块钱,如果是稍微复杂的大型的项目,需要评审一天,劳务费 1000 快。
    如何做:进入政府专家库,成为评审专家,系统会自动抽取,抽到你就可以去参加评审了。

  • 不一样,经过我的逻辑处理,类似用 excel 写测试用例那样的形式

  • 感谢你的建议!Flask 确实是一个非常优秀的 Web 框架,用它来构建有具体业务逻辑的 API 非常方便快捷。

    不过,我们的具体需求场景略有不同。我们主要是需要一个 “挡板” 服务(Mock Server),它的核心作用是被动接收来自外部系统持续推送的各种数据,并能够记录和展示这些接收到的信息,而不是提供预设好的、固定的接口响应。这个服务本身不包含任何特定的具体业务逻辑,只是作为一个数据接收器和日志记录器。

  • 执行力太强了

  • 恭喜恭喜,我还没考

1、参与 Appium 文档翻译计划
https://www.kancloud.cn/testerhome/appium_docs_cn
https://github.com/testerhome/appium/commit/8e4810fe335284e3df97ec855b663431232915aa
2、荣获 2 项政府荣誉
3、当选省技术委员会委员
4、入选中山市双领域专家