• 链式调用,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 邮箱是假的。成立。