微信抢票之踩坑

  明天就是微信抢票的ddl了,总算快熬出头了!

  本次软工三大作业,自己花了不少于150小时,可以这是我耗时最多的一个大作业。其实原本我是不打算在一门课的大作业上面花那么多时间的,但是由于刘强老师对我们组期望比较高,群主大腿又实力超群,自己不能拖太多后腿,于是只能用时间去拼成果。最后的结果还算满意。提交的PR节省了全班许多人的宝贵的时间,1800的并发应该是全班最高了(并发提高过程详见群主博客),邮箱验证的安全性的确比info账号密码高很多,功能测试最终也达到了很高的覆盖率(adminpage/views:90%,userpage/views:100%, wechat/handlers:97%)。

  

  不过,在这次作业中让我感到很遗憾的是我有三个预期的功能没有实现。

  第一个没有实现的功能是搭建二维码服务器。最初,我们想的是为了使用户能在不点进电子票详情页的情况下检票,因此需要将电子票二维码显示在我的电子票列表中。这就需要一个一个二维码的url,我总共想了4种方法。

  1, 最简单的就是利用python的相关库如PyQRCode(此处手动感谢王永赫同学),直接生成一张图保存在抢票服务器上,并返回该图片的链接。但是这会导致服务器里存储大量的二维码图片,对内存消耗较大。因此我并没有去实现这种做法。

  2,另一个是采用现有的二维码服务器,如清华大学图书馆采用的二维码服务器。这样只需要将需要电子票的unique_id使用get方法的参数传过去便能获得一张二维码图片。但是这样会导致电子票的unique_id泄露,不安全,因此我们也没有使用这种方法。(此处手动感谢群主)

  3,第三种方法是使用dataurl,这样能解决上诉两个方法存在的所有问题,可是,悲伤的消息是微信不支持dataurl,于是只能放弃。

  4,最后一种方法是自己搭建一个二维码服务器。该二维码服务器收到get请求时根据参数返回一张二维码图片。我们采用的正是这种方法。经过遴选,我最后决定使用PHP Qr Code。可是,由于对nginx和apache都很不熟悉,配置apache的过程中我遇到了很多问题。最后的结果是我花了一天的时间还是没有配好,由于时间紧张就放弃了这项功能。

  这次失败给我的教训是配环境时尽可能一步一步的来,每一步都最好能确认确实配置成功了在进行下一项配置,否则最后出现了问题也不知道具体哪一步错了,就很耽误时间了。

  第二个没有实现的是docker部署。由于助教给的ppt中讲得比较简略,其中还不少拼写错误,因此我在按照助教给的ppt中的教程一步一步往下配置的过程中遇见了很多问题。折腾了一天之后决定先自己好好学习一下docker在进行部署,于是第二天自己看了一遍docker的教程并重新开始配置。这一次,我解决了前一天没有解决的许多问题,当然也遇到了很多新的问题,最后卡在了mysql密码错误无法登陆,无论我们设置MYSQL_ROOT_PASSWORD也好,设置USER_PASSWORD也罢,甚至进入进入容器内尝试各种密码,最终都无法登陆mysql。为此我和群主连续两天调到深夜,还是没有解决。最后由于时间紧张不得不放弃使用docker部署。(此处手动感谢璠神在我配置docker过程中给予的帮助,感谢群主坚持到深夜仍不放弃我和我的bug)

  这次失败让我明白一个靠谱的教程有多么重要。当然,自己轻视docker配置的难度,在不了解docker的情况下草草动工,以至于浪费了较多时间,这才是这次失败的主要原因。

  第三个没有实现的功能是抢票前30分钟提醒用户功能。抢票提醒是一个异步任务,我采用了celery来实现。最终由于在测试过程中微信的access_token调用次数达到上限而无法继续调试。比较不合理的是access_token的有效时间是两小时,每天可调用的次数是两千次,因此按理说不可能不够用。最终发现框架果然实现得有问题,于是我修改了框架并提交了PR。但是,这时已经到星期三晚上了,第二天就得展示,虽然功能已经实现但是还有bug,我只能选择放弃该抢票提醒功能。

  这次失败,可以说主要原因是因为我的调试方法不太好,应该先测试异步任务,确保其实现正确后再测试完整的功能,导致测试效率较低,甚至触发access_token上限。当然,由此发现了框架中的bug也算一点补偿吧。

  

  当然,使用selenium进行自动化测试的过程中我们也遇到了一些问题,这里做一个简略的记录。

遇到的问题 解决方案
测试过程中无法直观的看到效果。
输出截图:self.browser.get_screenshot_as_file("pic.png")
phantomjs默认分辨率太低,导致部分按钮被响应式布局藏起来。
设置浏览器分辨率:self.browser.set_window_size(1024, 768)
页面跳转需要时间,不能立即响应  
使用WebDriverWait和expected_conditions
send_keys只能在文本框的原有文本后添加keys
send_keys之前先调用clear清楚文本框中的当前内容
文本框会有回调函数,导致每次修改文本框内容之后都不能立刻见效
每次修改文本框内容之后都调用sleep
不同测试函数之间存在数据干扰
在测试函数开始之间删除可能会产生干扰的数据并重新生成一遍所需数据
在测试与微信交互的过程中,从xml中解析出来的url和测试环境中的url不一致
将解析出来的url中的相关参数解析出来,并结合self.live_server_url手动生成正确的url

  最后,在这次项目开发过程中,像群主学习到了很多,在此表示感谢。

时间: 2024-12-29 01:28:00

微信抢票之踩坑的相关文章

《软件工程(三)》微信抢票应用 迭代二 个人总结

通过为期两周的微信抢票应用迭代二,我对一个django工程的各个方面都在后端小学期的基础上有了进一步加深的理解,同时感到一个成功工程的诞生是多么的不易. 整个工程可大致分为几块内容:功能开发,各种测试.部署上线和文档展示,每个方面都值得一说. 功能开发方面,完全是参照文档中给出的前后端接口要求和微信网页中"帮助"页面中提到的所有功能,不过一开始对整个工程没有概念,接手框架时对这个庞然大物不知所措.也曾试过想认真阅读代码,可读了一阵之后发现没有任何目的的阅读完全没有效率,尽管大多数代码行

不是所有的大作业都叫微信抢票大作业

为时四周的微信抢票大作业终于接近尾声,回首这段时间,真是感慨万千.不是所有的大作业都是微信抢票大作业,能够让人同时体验产品经理.开发工程师.测试工程师.运维工程师四个角色.经过了微信抢票大作业的洗礼,才知道之前对老师上课讲的内容只是一知半解,只有实践才能出真知. 一.搞开发 讲道理,这次大作业的开发工作其实不是很多.因为框架设计的很好,接口也介绍的很详细,只需要按部就班填坑就可以达到基本要求了. 但是既然助教上课都提到了几个优化方案,比如内存型数据库,异步队列等,好奇如我怎能不试呢.于是就开始给

软件工程(3)微信抢票总结

软工三的这个大作业需要在前人的框架基础上完成一个工程,和之前其他课程相比,有一种小学期的感觉,只不过并没有小学期那么充足的时间. 十一期间比较颓废,ftp几乎什么都没做,直接导致迭代一的大部分时间内在补ftp的坑.好在组长百忙之中熟悉接口并完成了大部分基础功能,迭代一ddl前粗暴地处理完的抢票逻辑再简单测试一下性能似乎也还算是说得过去. 迭代二我的主要任务是(迭代一未能开始的)功能测试和单元测试.课件的内容非常清晰,但开始时写起来并不顺利.在逐渐熟悉组长写的接口的代码的精妙的思想后,在阅读dja

微信公众号支付踩坑记

前两周做微信H5支付,在浏览器端用的,天真地以为app挂到公众号中也能用,结果不行>"<|||| ,只好再对接一次公众号支付,微信的支付对接下来总体感觉就是封装地不如支付宝,文档不完善,坑贼多.本文会主要关注对接过程中所遇到的问题,以及部分实现代码. 1.介绍 公众号支付(JSAPI支付)是指用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块来完成支付,适用于在公众号.朋友圈.聊天窗口等微信内完成支付的场景.注意公众号支付必须在微信环境

微信头像地址失效踩坑记附带方案

微信头像失效问题说明? 最近工作遇到一个微信头像失效的问题,情况是这样的,我们一个h5页面在微信授权后打开,会存储微信相关昵称和头像信息,不过,我们没有保存图片到自己的服务器,而是仅仅存储微信头像地址,然而过了n多天后,用户在微信修改了自己的头像,这时候,我们的服务是无感知的,又过了n多天,用户去访问我们那个h5页面,发现自己的头像是这样的: 用户找到我们,说自己有头像呀,怎么没显示呢? 我们也反问他,是否最近改过头像呢,他说没,不过很早之前改过. 而此时就比较尴尬,用户体验超级不好. 然后我们

微信小程序开发踩坑记录

1.问题:如果页面个数多于五个,要怎么处理 wx.navigateTo(OBJECT)最多只可以打开五个页面,如果页面多于五个,还想要返回,应该怎么处理呢 答:wx.redirectTo() 2.问题:获取不到unionId 我的小程序让用户登录后,用户信息解密出来的json结构没有unionId,可能是什么原因?是我小程序的后台配置有问题吗? 答:需要到开发者平台绑定 3.问题:微信小程序,如何调试? 什么方法,用alert吗? 答:console.log 4.问题:安卓上wx.uploadF

jsapi 调起微信支付的的踩坑

问题: 公众微信号调起微信支付的时候,有的时候调起支付成功,有的时候调起支付失败.利用抓包工具抓取数据显示授权和调用后台的微信预支付订单接口都成功并且都返回正确的数据.但是调起支付的时候传入的data老是弹出{'isTrusted:false'},正常的data应该是调用生成预支付订单的返回数据,即后台给返回的调起微信支付所需要的数据参数.我的代码: <script src="./js/jquery.js"></script><script src=&qu

微信小程序组件踩坑

子组件取名headtop  不行headtop1和其他的就行,唉 后面发现是第一次路径错了 然后在其他地方复制了这个组件  引入的是复制的组件导致的这个问题 原文地址:https://www.cnblogs.com/geekjsp/p/11530778.html

实测两款 GitHub 开源抢票插件,所有坑都帮你踩过了

如果你对自己手速和市面上的各种 “加速包” 都没什么信心的话,不妨试试用程序员的手段抢票? 况且,[12306 官方宣布屏蔽了一大批付费抢票软件],这也意味着你即使给这些软件付了会员费,也依旧抢不到票. 所以只能回到最初的手动抢票?No!No!No! GitHub 上有两个 “年经” 项目,每到春运前一段时间,就会定时定点的登顶热榜,助力一代又一代程序员和姿势丰富的非程序员们抢票回家. 那么,这两个项目究竟怎么用?好不好用? 和手动抢票.第三方软件抢票比起来优势是否明显? 安装使用过程中,会不会