AI写代码:我让元宝 将500+行开源c代码翻译成100+行python代码,完美实现功能

关注公众号,赠送AI/Python/Linux资料,对AI智能体有兴趣的朋友也可以添加一起交流

webbench是一个网站的压力测试开源软件。我经常用这个软件对网站做压力测试,顺便借用产生的HTTP报文测试设备通信。

现在需要把webbench功能融入到测试代码中去,测试代码是用python写的。所以需要把webbench转成Python的实现。webbench的代码不复杂,但既然有了AI,这个活就交给AI来干。看看腾讯元宝能不能做到

在线网页地址:https://yuanbao.tencent.com/chat/naQivTmsDa

图片

首先是提示词,让元宝变身编程语言转换专家。熟悉c以及Python代码编写。

图片

然后我将webbench的源代码以文件的形式上传,让元宝学习,并要求转成Python代码

图片

元宝只是提供一个类似伪代码的实现。要求继续完善

图片

这一次元宝完善了代码,但是从代码来看,很多以前在c使用的函数并没有转换成python的实现。要求元宝用python代码来覆盖并且用python的库

图片

这一次元宝提供的代码功能齐全

import socketimport multiprocessingimport argparseimport sysfrom time import time, strftimefrom multiprocessing import Lockfrom multiprocessing import Manager
# 全局变量http10 = 1  # 默认使用 HTTP/1.0method = 'GET'  # 默认方法为 GETclients = 1force = 0force_reload = 0proxyport = 80proxyhost = Nonebenchtime = 30url = ''success_count = 0failed_count = 0bytes_transferred = 0
# 请求模板def build_request(url, method='GET', force_reload=force_reload):    request = f"{method} {url} HTTP/1.1\r\n"    request += f"User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"    request += " Connection: close\r\n\r\n"    print(request)    return request.encode()
# 解析URLdef parse_url(url):    protocol, rest = url.split("://", 1)    host = rest.split('/')[0]    return protocol, host
# 基准测试核心函数def benchcore(host, port, request, benchtime,speed_counter,failed_counter,bytes_counter):    global success_count, failed_count, bytes_transferred    start_time = time()    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)    s.settimeout(5)    try:        s.connect((host, port))    except ConnectionRefusedError:        print("Connect to server failed. Aborting benchmark.")        return None    while (time() - start_time) < benchtime:        try:            s.sendall(request)            if force:                return            while True:                try:                    data = s.recv(1500)                except BaseException as e:                    continue                # print(data)                if not data:                    failed_counter['value'] += 1                    break                with Lock():                    bytes_counter['value'] += len(data)                    speed_counter['value'] += 1        except socket.error:            with Lock():                failed_counter['value'] += 1            return    s.close()
# 子进程执行的基准测试def child_benchcore(host, proxyport, request, benchtime,speed_counter,failed_counter,bytes_counter):    host=host    port=proxyport    request=request    benchtime=benchtime    benchcore(host, port, request, benchtime,speed_counter,failed_counter,bytes_counter)
# 解析命令行参数def parse_args():    parser = argparse.ArgumentParser(description="Simple Web Benchmark")    parser.add_argument("url", help="URL to benchmark")    parser.add_argument("-c", "--clients", type=int, default=1, help="Number of clients")    parser.add_argument("-t", "--time", type=int, default=30, help="Run benchmark for <sec> seconds")    parser.add_argument("-f", "--force", action="store_true", help="Don't wait for reply from server")    parser.add_argument("-r", "--reload", action="store_true", help="Send reload request - Pragma: no-cache")    parser.add_argument("--http09", action="store_true", help="Use HTTP/0.9 style requests")    parser.add_argument("--http10", action="store_true", help="Use HTTP/1.0 protocol")    parser.add_argument("--http11", action="store_true", help="Use HTTP/1.1 protocol")    return parser.parse_args()
# 主函数def main():    global benchtime, clients, force, force_reload, http10, url, proxyhost, proxyport    args = parse_args()    url = args.url    clients = args.clients    benchtime = args.time    force = args.force    force_reload = args.reload
    if args.http09:        http10 = 0    elif args.http10:        http10 = 1    elif args.http11:        http10 = 2
    _, host = parse_url(url)    if ':' in host:  # 如果URL包含端口,解析端口号        host, port_str = host.split(':')        proxyport = int(port_str)
    request = build_request(url, 'GET', force_reload)    manager = Manager()    speed_counter = manager.dict(value=0)    failed_counter = manager.dict(value=0)    bytes_counter = manager.dict(value=0)
    processes = []    for _ in range(clients):        p = multiprocessing.Process(target=child_benchcore, args=(host, proxyport, request, benchtime,speed_counter,failed_counter,bytes_counter,))        p.start()        processes.append(p)
    for p in processes:        p.join()
    print(f"Benchmark completed at {strftime('%Y-%m-%d %H:%M:%S')}\n")    speed = speed_counter['value']    failed = failed_counter['value']    bytes_received = bytes_counter['value']
    print(f"\nSpeed={speed} pages/min, {bytes_received / benchtime:.2f} bytes/sec.")    print(f"Requests: {speed} succeeded, {failed} failed.")
if __name__ == "__main__":    main()

执行代码,模拟10个终端在30秒进行网站压测。统计结果和c代码的差不多。算是实现了大部分功能

图片

不过仔细对比代码,开源webbench中关于proxy的处理并没有实现。但是至少这个转换完成了大部分的功能。省去了一些时间。目前只测试了基本使用,还没有测试所有的功能调用。

总结:

这种比较复杂的代码,最好是给一个完整的提示词,然后再运行。代码的质量,完整度明显要好一点。因此一个好的提示词,是产生一个好结果的关键。

我再vs code上用腾讯AI编码助手试了一遍,也可以得到类似的代码结果。

腾讯AI编程助手的安装使用方法参考这篇文章

又一大厂开放AI代码助手

经过今天的尝试,后续很多代码转换工作都可以交给AI来做了。省去很多写代码的时间

关注公众号,赠送AI/Python/Linux资料,对AI智能体有兴趣的朋友也可以添加一起交流

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿与代码

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值