云计算领域专家/开发工程师回答
作者:阿泽,复旦大学,Datawhale成员 “A/B测试不一定是最好的评估方法。它不是万能的,但不会A/B测试肯定是不行的。” —— 字节跳动副总裁杨震原 ?...这几种检验方式的划分很简单: 双侧检验:备择假设没有特定的方向性,形式为“≠”这种检验假设称为双侧检验; 单侧检验:备择假设带有特定的方向性 形式为">""<"的假设检验,称为单侧检验 "<"称为左侧检验...statsmodels.stats.proportion import proportions_ztest as ztest ztest(np.array([x1, x2]), np.array([n1, n2])) """ # 源代码计算方式...我们知道假设检验的有两类错误: H0 正确(真实情况) H0 错误(真实情况) 拒绝 H0(研究结论) I 类错误 正确 接受 H0(研究结论) 正确 II 类错误 I 类错误称之为弃真:实验组和对照组没有显著差异...II 类错误称之为存伪:实验组和对照组有显著差异,但我们没有接受方案。 II 类错误和统计功效 (power) 有关,统计功效可以简单理解为真理能被发现的可能性。
(最后会给大家附上这个函数的完整代码可复制版本) 代码中的深拷贝是jquery的方法:$.extend(true,新,旧) 我们每次都输出打印了下这个新请求体,来看看是不是符合我们预期吧: 大家可以看到...看看现在的代码: 当我们判断出来这是个json串的时候,就对其进行依次替换。 我们遍历这个字典的key,然后依次进行替换,仍然是俩层大循环: 代码如下: 来看下效果: 果然都进行了替换。...console.log(new_body) } } }catch (e) { //若也不是,那就不需要做异常值测试了...alert('当前接口的请求体类型不支持异常值测试!')...所以下节课会给大家公布一些解决方案和具体代码。小伙伴也可以自己想想办法,看看怎么解决?
现实中基本没有。原因就在于这个成本太高了,性价比极低。...在我们传统的测试理论-11种用例设计方法中,哪怕一个简单的功能都可能要写出几百条甚至上千条用例,如果真的可以实现如此全面的覆盖,理论上没有bug会遗漏了。...比如这个接口异常自动测试功能,我们的做法其实就是用代码简单的进行依次替换,比如10个字段,我们用20个测试数据依次替换的时候,其他9个字段保持用户保存在接口库中的正确值。...因为我们每次发送请求,传给后台的参数都是替换后的,这就意味着我们要在前端js里处理 复杂的替换功能: 我们可以先只完成这个复杂的替换代码,不真的去请求后台。...明天继续本功能实现
当然异常测试层我们也可以加上对应的代码来生成蒙层: 这样便可以防止用户进行异常操作了。...为了防止关闭异常测试层后引发其他bug,我们把关闭函数的代码从隐藏这个div改成刷新整个页面: 好言归正传,让我们继续开始异常值测试。 貌似该开始实际进行测试了,按照我们之前章节的设计。...这里是我们一开始设计时候没有考虑完全造成的,在我们测试开发频繁快速的落实工具中,缺少完整专业的产品设计和开发分解,很容易出现这样的设计逻辑出现问题的情况,遇到这种时候一般难免都会产生挫败感,因为这意味着...: 要么我们要增加额外的没有预想到的工作量,比如持久化这个请求体参数; 要么我们要推翻之前的设计来返工。...} } } 代码中运用了 俩次try来判断。如果能命中两次中任何一次try则说明 可以解析并测试,否则就是不支持。
我们忽略掉 这个请求根本没有返回值的报错:(因为url都是随便写,我们可以之后用自己公司的实际接口测试,但是要注意,这个请求频率非常快,接近并发,请不要随意尝试,一瞬间几百个请求出去,你们服务器可能会报警...一个简单的方法是把下面的整个大请求代码段都try了。 然后测试发现不报错了。 然后我们前端其实此时已经成功拿到了返回值,虽然返回值现在都是“对不起,接口未通!”...我们就来做一下动态生成html代码,来看看最终效果,之后我们有机会再找个可以请求通的接口来测试。...我们采用标准方法,所以返回代码这么写: 然后前端接收到之后 这么解析: 重启服务,刷新页面,开始测试: 发现其实效果已经不错了,没有出现对不上号的情况,我们把对应的修改 给放入到上面的二维数组中吧...其实这并不影响实际使用,实际使用中,基本是几百个请求返回体,没人关注他们的摆放顺序,基本就是大致扫一眼,看看没有服务器严重报错的情况就结束测试了。
本节开始之前先感谢有同学反馈并主动过修复的一个bug:就是在某些接口的返回值中,中文会显示乱码的问题 我们找到views.py中调试层发送接口的函数 Api_send 然后看到它最后一行,就是把返回值直接给到前端的代码...: return HttpResponse(response.text) 之所以中文会出现乱码,就是在这里没有进行任何处理。...现在我们打开div的js函数error_test,要加上自动显示该接口名称的代码: (别忘了加上颜色) 效果如下: 然后继续,我们貌似落下了一个重要的函数,就是清除数据的初始化函数。...有没有简便设计呢?当然有: 就是我们直接把这个div的初始html写死,只要打开就抛弃之前一切html,直接按照写死的新html来展示即可。...好了,本节内容到此为止,需要下载源码的同学请移步到: 接口测试平台系列 进行下载
嗯,我的代码没有else系列,一个设计模式业务真实使用的golang系列。 ? 前言 本系列主要分享,如何在我们的真实业务场景中使用设计模式。...) - 继承抽象类父类 - 实现抽象方法 子类二(按抽奖次数抽奖类型) - 继承抽象类父类 - 实现抽象方法 子类三(按数额范围区间抽奖) - 继承抽象类父类 - 实现抽象方法 但是golang里面没有继承的概念...------------ //我的代码没有`else`系列 //模板模式 //@auhtor TIGERB //------------------...//------------------------------------------------------------ //我的代码没有`else`系列 //模板模式 //@auhtor TIGERB...我的代码没有`else`,只是一个在代码合理设计的情况下自然而然无限接近或者达到的结果,并不是一个硬性的目标,务必较真。 2.
嗯,我的代码没有else系列,一个设计模式业务真实使用的golang系列。 ? 前言 本系列主要分享,如何在我们的真实业务场景中使用设计模式。...Remove: 移除一个子组件 -> 稳定不变的 Do: 执行组件&子组件 -> 变化的 套用到订单结算页面信息接口伪代码实现如下: 一个父类(抽象类): - 成员属性 + `ChildComponents...----------------------- //我的代码没有`else`系列 //组合模式 //@auhtor TIGERB //-------...我的代码没有`else`,只是一个在代码合理设计的情况下自然而然无限接近或者达到的结果,并不是一个硬性的目标,务必较真。 2....---- 我的代码没有else系列 更多文章 代码模板 | 我的代码没有else 链式调用 | 我的代码没有else 点击https://github.com/TIGERB/easy-tips/tree
本节,我们要开始整理并优化一下 requests相关的底层代码。 先来统计下,一共有哪些函数: 好的,目前我们看到有六个函数 我们具体优化什么呢?肯定要有优化点的。...首先说为空,我们这里函数对为空进行判断,为空的话,我们就给强行改成{} 来检查一遍六个函数,给没有处理的加上代码: 本节先放出这么多,大家还能想到什么优化点欢迎留言 接下来是日志模块的开始设计...然后在后台相关函数的的内部加上日志记录代码,包括正常,非正常的记录,并且用时间戳和接口id来当作标记。...当用户点击查看日志按钮后,我们打开一个空白的textarea多行文本框,并通过一个接口请求后台,后台去访问这个日志文件,根据接口id和时间戳,提取出恰到好处的部分,并当作内容字符串 返回给前端,前端js通过赋值代码把内容展示到空白的
按照代码中写好后看看效果噢~ 纯纯的bootstrap3 <li class...这些小div 我们要放在一个大div里,才可以生效:具体代码如下: 在刚写的ul下方,加入这个大div和里面的小div: 还是给出源码: <div id="myTabContent" class="...这就是默认显示 好看看效果: 好我们<em>测试</em>完毕后,没问题,接着就是要开始开发各个小div的内容了,得删掉之前写的小文案。...当遇到这种清空时候,我们可以有俩种办法: 土办法,用超大量的js<em>代码</em> <em>实现</em>。 bootstrap3找对应的表格,不过不支持增删,需要进行二次开发,难度更高 直接找支持增删的第三方组件。
在这个div中添加一个按钮组,具体代码如下: 按钮组的好处是可以让俩个按钮紧贴着风格很简约。 效果如下,放在了右上角,float:right可以让俩个按钮并不会占用一整行位置。...紧接着我们写好接口的:请求方式和url,域名我们一会再单独一行写,因为大多数情况下,我们调试接口的url不会变动,而域名则会常变,不同的测试环境都不同。...请求方式和url 包括后面的发送请求按钮send ,这一套都在一行写比较好 继续添加: 代码中是一个大的ul,里面是3个小li 。style属性也是简单进行优化了一下。...俩个输入框,都加入一个新的li标签,里面放入类似Send的按钮但是字体和宽度都变小,注意各个li的宽度要对应变化,具体如下: 大家尽量按照我的宽度设置,已经调试的很好了: 效果如下: 功能等我们之后再实现即可...本节就到这里结束了,内容较多,但是没有难点。大家细心一点,别写错了。 ps:最近追的小伙伴变少了。那么看到此节的你可真的是太给力了。这样不算测开,什么算测开。
: 代码的含义大家不用深究,毕竟是第三方的组件。...样式我稍微调过,大家可以直接复制代码: <table class...先看看页面效果: 我们可以简单测试一下 三个按钮的功能: 添加: 删除和编辑点击报错了,如果有报错。...大家不要慌,这是第三方的代码里作者写了一个严格语法标记的问题,我们找到删除即可: 打开bootstable.js 你会看到顶部有一个字符串:use strict 我们删除这行。...然后回去刷新页面再测试一下: 点击编辑按钮,那个小铅笔标志的,该行就进入到编辑状态,我们修改后,点击对号按钮,即可修改成功。 然后我们点击删除按钮 测试一下: 删除也成功了。
上节我们实现了登陆功能,但是可惜用户表中没数据。所以这节我们讲如何注册用户。 还记得我们之前在登陆页面 做的那个 注册账号的超链接么?...我们现在要想想,用户点击注册账号后,要实现个什么效果? 有 以下几种设计: 切换到另一个页面,一个注册页面,里面有用户名密码确认密码 注册按钮。...然后我们切换回浏览器,确保服务没有因为报错而中止。如果报错中止,就是因我们先写urls.py后,没有来得及写后台对应函数就切换了pycharm,导致django热重起,然后发现没有函数就报错停止了。...现在我们刷新页面来测试,先登陆一个账号: 用户名 测试开发干货 密码123。 1.点击登陆,提示用户名密码错误。...http://你电脑的ip:8000/home/ 下期:退出功能实现 + 熟悉 django自带后台管理平台 免费原创不易,请小伙伴多多支持,分享+点赞!
经过了最近几十名小伙伴的反馈后,凑够了一些bug,对于一个复杂一点的工具化平台来说,尤其是我们一个测试单枪匹马负责研发且缺少测试环节的情况下,有几个bug太正常了,大家不要灰心。 ...其他的教程中可能从头到尾都是最正确的代码,一个bug都没有,我们跟着学完之后,难免会觉得这些太简单了,太顺利了,然后等到自己实际工作中敲起来,出现了bug后接受不了,开始悲观自暴自弃甚至放弃,自我否定。...首先找到我们的删除项目的函数:delete_project 发现我们之前写这个函数的时候,还没有去开发接口概念,所以没有写接口删除的代码,那么现在就该加上了。...(之后项目内的用例模块也需要到时候进行删除),增加代码后如下图: 这样就可以实现删除项目id为待删除项目的id的 所有接口了 bug-2: 描述:接口保存后,再打开发现数据没有显示成功。...还并没有开始写显示接口真实内容的代码,所以下一节才是要做这个显示,因为当中涉及到编码格式的显示/子页面的切换/下拉框的选择等等,所以还是比较复杂的。
本节我们属于一个简单的小功能实现,就是复制接口。 需求: 用户点击接口后面的按钮,就会生成一个新的接口,除了名字后缀有副本字样外,其他一切数据都一摸一样。...这样方便用户给接口的数据改一改就变成了新的测试点或其他接口了。...old_api.last_api_body ) # 返回 return HttpResponse('') 好我们重启服务,刷新页面,测试一下...好本节到此结束,下节开始异常自动测试功能。 很多小伙伴问到底什么时候才能结束? 这里回答下:没有结束的时候,实际上现在已经可以稳定支撑简单的接口测试了。当然随着时间推移,功能会越来越多。...这样的好处是,你可以隔几天就在公司的群里说,接口测试平台新版上线,本次更新内容:xxxxx 这样既能刷存在感,又给人你一直在维护,这个平台的前景非常可靠的样子...
这个错误是说res这个变量没有被定义。 我们看看代码 这里面的res 被定义的途径只有 eid == Home.html 的时候才可以。...所以我们做的这个平台其实也是一个正常的开发项目,也需要一些自测,尤其是在动底层的核心代码函数的时候,影响很大。不通过测试,很难意识到修改的底层被哪些表层调用了,兼容出问题。 这里修改很简单。...这样如果有控制说res={什么数据} 也可以,没有指定的那就是不需要数据,就当{}空字典返回即可。...创建好后,我们去执行 那俩天最常用的 同步表结构/生效的 命令吧: 这俩条命令执行的过程中要确保项目代码没有bug,不会因为报错导致启动都启动不了才行。...创建了2个,这样我们在前端显示设计的时候才可以进行测试复数个项目的西餐时效果到底如何。
现在我们来立马实现一下 取消和保存功能: 取消功能很简单,我们写个刷新即可:注意修改俩个按钮的onclick: 好,继续开始,我们去写保存功能: 这个函数并不复杂,但是我依然要按部就班的去实现...然后提取是靠一段jquery 实现,如果是js则太过麻烦了。...没有出现任何报错,然后去后台看看 是否保存成功: 可以注意到,是成功保存了的。 然后,我们前端的展示旧数据的html-dom部分此时也要进行修改。...这里我们仍然用jquery来快速实现这个功能,代码如下: 这里我采用了拼接方案,用数据库的值直接就拼成了 目标选框的id, 这也是我一开始起id的时候故意设计,是不是很讨巧。...别抄错少了引号哦,可以复制如下代码: $(':radio[id="encyption_{{ project.encyption_insert }}"]').attr('checked',true) 好了
本节我们要真正的实现这个加密函数: 为了便于调试,我们先给普通接口调试函数 加入对它的调用: (注意调用位置一定要放到 替换全局变量的后面!最好是在真正发送请求代码部分之前紧贴!)...加密表达式 根据加密表达式从url和body中拿出 需要用到的参数 组装成完整加密表达式并执行,生成加密字段key/value 根据加密插入位置 放到url或body中 返回加入后的url和body 第一步代码...: 第二步代码: 我们先提取一下 表达式的key 和 字段,看看是否成功: 结果如下,不用管报错先,因为还没写完 可以看到 提取的很顺利 然后我们要从给的url和body中依次拿出这些变量,注意,
在程序中添加新代码时,你也可以对其进行测试,确认它们不会破坏程序既有的行为。程序员都会犯错,因此每个程序员都必须经常测试其代码,在用户发现问题前找出它们。...使用Python模块unittest中的工具来测试代码,你将学习编写测试用例,核实一些列输入都将得到预期的输出。...单元测试和测试用例:Python标准库中的模块unittest提供了代码测试工具。单元测试用于核实函数的某个方面没有问题;测试用例是一组单元测试,这些测试一起核实函数在各种情形下的行为都符合要求。...对于大型项目,要实现全覆盖可能很难,通常,只要针对代码的重要行为编写测试即可,等项目被广泛使用时,再考虑全覆盖。...如果该条件确实满足,你对程序行为的假设就得到了确认,你就可以确信其中没有错误。如果你认为应该满足的条件并不满足,Python将发生异常。
1.单元测试和测试用例 单元测试用于核实函数的某个方面没有问题。测试用例是一组单元测试,这些单元测试一起核实函数在各种情形下的行为都符合要求。...全覆盖式测试用例包含一整套单元测试,涵盖了各种可能的函数使用方式。对于大型项目,要实现全覆盖可能很难。最初只要针对代码的重要行为编写测试即可,等项目被广泛使用时再考虑全覆盖。...4.测试未通过咋办 不用修改测试,而应修复导致测试不能通过的代码:检查刚对函数所做的修改,找出导致函数行为不符合预期的修改。...这些方法的名称必须是描述性的,这才能让你明白测试未通过时的输出。这些方法由Python自动调用,根本不用编写调用它们的代码。...二,测试类 针对类的测试通过了,就能确信对类所做的改进没有意外地破坏其原有的行为。 1.各种断言方法 Python在unittest.TestCase类中提供了很多断言方法。6个常用的断言方法。
领取专属 10元无门槛券
手把手带您无忧上云