• 已经 star,期待更加完整的功能和文档

  • 很棒!我本来也有一个这样的想法,没想到你们先实现了

  • 我之前用 go 做过,可以参考一下。还是自己写代码比较灵活。
    https://testerhome.com/topics/24998

  • mqtt 是长连接,发送消息之前判断连接是否是可用的,不用就重新。

  • from string import Template
    ... 
    ... _class_template = """
    ... class ${klass}:
    ...     def __init__(self, name):
    ...         self.name = name
    ... 
    ...     def ${method}(self):
    ...         print('Hi', self.name + ',', 'welcome to', '$site')
    ... """
    ... 
    ... template = Template(_class_template)
    ... exec(template.substitute(klass='MyClass',
    ...                          method='greet',
    ...                          site='StackAbuse.com'))
    ... 
    ... obj = MyClass("John Doe")
    ... obj.greet()
    Hi John Doe, welcome to StackAbuse.com
    
  • 如何问问题 at 2021年01月27日

    能够正确的提问,已经算是解决 50% 的问题

  • 链式调用,httprunner3 就实现了

  • 升级前是换行的,现在换行没了

  • 一下子不是很习惯~
    感觉新版的间距太大了

    另外一个问题是看到有消息提醒,但是点击进去,提示为空的

  • 谢谢,搞定~


  • Mac 16 寸
    Chrome 87.0.4280.141
    想问一下,怎么切换回去白色主题

  • 记一个自己写的 bug(对全局变量,类变量生命周期不理解导致的)
    有个变量叫 today,是格式化后的今天日期,很多地方用到,我就把它封装到了工具类的全局变量中。

    本地调试没问题,结果是正常,在服务端跑也是正常的。可是第二天获取的日期就不对,还是前一天的日期。
    难道是缓存的问题?重试服务试试,结果还真的就行了。搞定,笑嘻嘻~
    可是到第三天,怎么又是变成了前一天的日期???真的是见鬼了。
    本地调试看看,代码没问题啊,能正常获取。这到底是怎么回事啊!
    难道 Python 标准库出问题了?不会吧。换 Django 日期工具类试试。
    推送代码,重新部署服务,看看获取结果,一切正常。妥妥的。这下应该不会再有问题了吧?
    又是一天早上,哦豁,怎么结果又是获取了昨天的日期。
    我不信,重启服务。嗯,结果是对的,果然重启能解决 99% 的问题。
    就这样,通过定时任务每天重启服务的方式过了几个月。

    直到有一天,要获取一个当前时间戳的变量,也是很多地方用到。代码大概是这样

    一看日志,恍然大悟

    [12/Jan/2021 21:17:15] "GET /api/kafka/config/ HTTP/1.1" 200 216
    time is: 1610457411.562096
    [12/Jan/2021 21:17:26] "GET /api/kafka/template/ HTTP/1.1" 200 5838
    time is: 1610457411.562096
    [12/Jan/2021 21:17:29] "GET /api/kafka/template/ HTTP/1.1" 200 5838
    time is: 1610457411.562096
    [12/Jan/2021 21:17:31] "GET /api/kafka/template/ HTTP/1.1" 200 5838
    

    可以看到打印的 t 一直是没变化的,但日志时间是不停变化的
    t 是类变量,并不会在 list 方法结束后就释放内存,然后下次请求进来重新获取。而是程序重启之后才会重新获取。
    之前 today 那个坑不容易看出来,因为是日期,隔天才变化。

  • Java 的没有,给个 Go 的~

    需求

    代码实现

    package simple
    
    import "strconv"
    
    func summaryRanges(nums []int) []string {
        ans := []string{}
        n := len(nums)
        if n == 0 {
            return ans
        }
        for i := 0; i < n; i++ {
            for j := i; j < n; j++ {
                cur := nums[j]
                var next int
                if j != n-1 {
                    next = nums[j+1]
                }
                if j == n-1 || next-cur > 1 {
                    if j == i {
                        ans = append(ans, strconv.Itoa(cur))
                    } else {
                        ans = append(ans, strconv.Itoa(nums[i])+"->"+strconv.Itoa(cur))
                    }
                    i = j
                    break
                }
            }
        }
        return ans
    }
    
    

    单元测试

    package simple
    
    import (
        "reflect"
        "testing"
    )
    
    func Test_summaryRanges(t *testing.T) {
        type args struct {
            nums []int
        }
        tests := []struct {
            name string
            args args
            want []string
        }{
            // TODO: Add test cases.
            {"test1", args{nums: []int{0, 1, 2, 4, 5, 7}}, []string{"0->2", "4->5", "7"}},
            {"test2", args{nums: []int{0, 2, 3, 4, 6, 8, 9}}, []string{"0", "2->4", "6", "8->9"}},
            {"test3", args{nums: []int{-1}}, []string{"-1"}},
            {"test4", args{nums: []int{0}}, []string{"0"}},
            {"test5", args{nums: []int{}}, []string{}},
        }
        for _, tt := range tests {
            t.Run(tt.name, func(t *testing.T) {
                if got := summaryRanges(tt.args.nums); !reflect.DeepEqual(got, tt.want) {
                    t.Errorf("summaryRanges() = %v, want %v", got, tt.want)
                }
            })
        }
    }
    
    

    执行结果

  • HttpRunner v3.x 中文文档 at 2021年01月08日

    这也太酷了!

  • 用例管理平台 at 2021年01月07日

    嗯嗯,搞定了

  • 枚举了一下答案,正确邮箱应该是 C 的。
    假设 A 是说真话,得 A 的邮箱是假的,B 说假话,得 A 邮箱是假的,C 说假话,得 C 邮箱是真的,D 说假话,得 B 邮箱是假的。成立。

  • 看了一波,感觉还是 agileTC 比较合适,这个是客户端,我比较期望是 web 模式。

  • 体验中,后续会小改

  • 嗯嗯,看到了。也部署好体验一波,agileTC 体验不错

  • 确实满足的,调用阶段想多看看

  • 这个不是开源的呀

  • 已经部署了,不满足需求~

  • 这个有看到,部署的时候遇到问题,一直起不来。在社区的帖子下面回复了,作者木有回复

  • 没有的,文档有在线 demo

  • 我想这个应该能满足你的需求~
    https://www.yuque.com/lihuacai/sggdx7/cn5ncg