Featured image of post 如何及时掌握各种常用框架的最新变化?

如何及时掌握各种常用框架的最新变化?

获取常见开源项目的最新发布记录

现今我们的自动化测试、测试工具、各种框架其实会依赖很多知名的开源框架,比如Pytest、Junit,Selenium、Appium、JMeter等等都是应用非常广泛的开源框架。而正因为用户广泛,社区繁荣,所以这些开源项目本身的更新迭代也是极为频繁的,不定期地会引入一些新功能,同时也会对一些历史版本中的原有功能进行调整或者废弃。

这些频繁更新,在推动开源项目不断发展的同时,也为我们使用这些项目带来了一些困扰,就是不知道什么时候可能原来用的功能在新版本中就发生了变化,为我们及时应用新版本带来不少挑战。

针对这个问题,通常的做法,其实就是去查看项目的发布记录,了解每个版本发布的主要变化,也了解相关项目本身的发展趋势。

而测试工作牵涉到的各种主流开源项目又比较多,所以这里就有了自动收集各种主流版本发布记录并集中汇总的想法。

下面就是我利用Github接口自动收集一些主流测试相关开源项目的版本更新记录,转化为网页放到个人博客 上的呈现效果,对于我们一站掌握各种主流开源框架的变更趋势带来一些便利。

  • 主页

  • 项目更新记录详情(目前保留最近10次更新)

核心方法其实就是下面这段,通过预定义的项目清单,获取对应项目的历史发布记录。分享如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
def update_release_list(self):  
    """  
    获取项目release清单并更新以保持清单列表文件  
    :return:  
    """    for project in self.projects:  
        name = project["name"]  
        url = self.baseUrl + f'/repos/{project["repo"]}/releases'  
        res = requests.get(url, headers=self.headers)  
  
        # 获取项目总页数  
        pages = APIs.github_page_count(res)  
        total = pages['last'] if 'last' in pages else 1  
  
        # 已保存的release清单,作为当前清单基准  
        if not os.path.exists(os.path.join(self.release_dir, f'{name}.json')):  
            old_list = []  
        else:  
            with open(os.path.join(self.release_dir, f'{name}.json'), "r", encoding='utf-8') as file:  
                old_list = json.load(file)  
        release_list = old_list  
  
        # 去除原清单中的状态字段, 用于比对  
        old_list = [{k: v for k, v in d.items() if k != 'status'} for d in old_list]  
  
        # 首页已获取,生成清单,默认状态False(未获取detail)  
        if res.headers['content-type'].find('json') > 0 and isinstance(res.json(), list):  
            for release in res.json():  
                record = {'id': release['id'],  
                          'name': release['name'],  
                          'date': release['created_at']}  
                if record not in old_list:  
                    record['status'] = False  
                    release_list.append(record)  
                    print(f'got release {release['id']}-{release['name']}, 1-{total}')  
                else:  
                    print(f'release {release['id']}-{release['name']} exist!')  
  
        # 获取后续页面清单  
        if 'last' in pages and 'next' in pages:  
            for i in range(pages['next'], total + 1):  
                page_url = url + f'?page={i}'  
                res = requests.get(page_url, headers=self.headers)  
                if res.headers['content-type'].find('json') > 0 and isinstance(res.json(), list):  
                    for release in res.json():  
                        record = {'id': release['id'],  
                                  'name': release['name'],  
                                  'date': release['created_at']}  
                        if record not in old_list:  
                            record['status'] = False  
                            release_list.append(record)  
                            print(f'got release {release['id']}-{release['name']}, {i}-{total}')  
                        else:  
                            print(f'release {release['id']}-{release['name']} exist!')  
  
        # 按id排序  
        release_list.sort(key=lambda x: x['id'], reverse=True)  
  
        # 更新清单文件  
        with open(os.path.join(self.release_dir, f'{name}.json'), "w", encoding='utf-8') as file:  
            file.write(json.dumps(release_list))

再结合具体release的id获取详情信息,组装md文档直接用hugo生成页面文件就可以了.

使用 Hugo 构建
主题 StackJimmy 设计