HiKariのTechLab

光の技术屋


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 站点地图

  • 搜索

【极客日常】再度上手start-fastapi

发表于 2020-02-26 | 更新于 2024-04-07 | 分类于 极客日常

近期项目组准备做一个新的工具,因此自个儿做的start-fastapi框架正好能派上用场试试水。在起草需求搭建最初框架的时候也逐步发现原先的start-fastapi有一些不足的地方,因此做了一些针对性的优化。

首先必须重新介绍一下start-fastapi,其本身是轻量级web框架fastapi的延伸,但是由于fastapi给的例子过于简单,因此就基于此做了一个简单的web后端脚手架,借鉴了eggjs的目录组织模型,使得整个框架更加易于投产。如果稍微看过start-fastapi其中的代码的话就能够发现它并不是一个OOP的框架,这是因为一方面python本身不是向java一般与OO设计理念强耦合,且其module隔离与动态加载机制已经足够区分每一个功能模块了;另一方面轻量的HTTP Web Server本身作为无状态的服务,各个功能模块应该是静态式、单例式的存在。在start-fastapi上也可以继续扩展底层。从起草工具的效果来看,多人协同开发时,每个人负责的模块应当也不会有太大冲突的概率。

接下来是近期优化的一些点,首先是application目录下的优化。原先application分为了service、middleware、config等多个模块,但现在直接缩减为controller、logger跟router,这是因为service跟middleware里全局性的功能模块一般都是用户自定义的,而controller的response可以约定,logger factory也可以统一提供。而router作为后端app的固有功能,这块就必不可少了。

阅读全文 »

【极客日常】写一个基于vuetify的v-autocomplete的自定义组件

发表于 2020-02-16 | 更新于 2025-04-12 | 分类于 极客日常

Vuetify是Vue的一套前端组件框架,基于Material Design设计,界面较为整洁。最近由于项目需要开始入手,但在写自定义v-autocomplete组件的时候却踩了许多坑。因此本文果断记录一下踩坑的过程。

首先新上手vue的话肯定耳边都会萦绕着“双向绑定”一词,用的最多的属性就是v-model了。但是我们参考官方文档可以发现v-model只是语法糖,除了绑定默认组件的值(比如select元素是value,而checkbox元素是checked)之外,还会绑定监听用户输入事件(比如text元素是input,而radio元素是change)。因此要用v-model的话需要关注相应的元素是否本身就支持语法糖。我们在v-autocomplete官方文档中可以发现,其扩展了v-select组件,因此如果用自定义组件包一层的话,一般主要关心的是怎样传递最终选择的value,就可以了。

比如要做一个异步检索items的v-autocomplete组件,我们可以用如下的方式自定义:

其中template如下:

阅读全文 »

【GitHub探索】FastAPI——新一代实用python轻量级Web后端框架

发表于 2020-02-01 | 更新于 2024-04-07 | 分类于 GitHub探索

本月,一款名为FastAPI的轻量级Web框架在trending榜上有名。本着踩坑的心态试用了fastapi,发现其坑并没有许多相同量级web框架(比如flask)来的多,上手极其容易。因此果断整理了一下fastapi的上手过程。

FastAPI基于Starlette网络框架进行封装,不仅性能优异,并且解决了许多用python开发效率工具或是轻量级应用的后端同学的痛点。比如:

  • 结合pydantic,实现param与body的静态类型检查
  • 用妥当的方式接收/返回json body
  • 结合Starlette,从而自带restful api以及middleware的支持
  • 自带调试router,基本顶替postman的工作
  • etc

安装fastapi需要python3.6以上,预先pip3 install fastapi uvicorn。我们来看一下FastAPI的例子:

阅读全文 »

【测试人生】为游戏策划与QA量身定制的excel表diff算法

发表于 2020-01-23 | 更新于 2024-04-07 | 分类于 测试人生

国内的游戏研发团队里许多策划同学都习惯采用excel作为配表工具。因此对策划同学校对与QA同学验收工作来说,需要相应的diff工具去检测excel文件的变更,从而能够尽早发现配表的问题。为此,在笔者启动的游戏效率工具集gameff-toolset小项目中,首个小脚本便做了excel diff。

diff的算法有非常多,但是如何体现策划表与策划工作的特性,这才是最需要注意的。许多项目的策划表都通过SVN进行存储,因此从SVN的commit信息中就可以知道哪些策划表发生了变更/增加,因此,我们只需关心每个excel文件如何进行diff运算就可以了。

策划的excel配表有如下的特点:

阅读全文 »

【极客日常】解决使用mongodb时同时update多条数据的问题

发表于 2020-01-12 | 更新于 2024-04-07 | 分类于 极客日常

在实际使用mongodb的场景中,我们经常遇到多个请求同时在某个collection里update多条document的需求。这个需求看似有许多种解法,但是具体哪种好也说不准。现在便让我们一探究竟吧~

首先我们利用pymongo添加1000000条数据,name字段为hello:

1
2
3
4
5
6
7
8
9
10
11
12
13
from pymongo import MongoClient

client = MongoClient()
db = client['test']
coll = db['concurrency']

coll.insert_many([
{
"name": "hello",
"num": i
}
for i in range(1000000)
])

然后,我们另外加一个进程,启动任务为将num字段为偶数的documents的name字段给update成aa,而主线程则update所有documents的name字段为bb。代码如下:

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
from pymongo import MongoClient
import pprint
from multiprocessing import Pool, Process


client = MongoClient()
db = client['test']
coll = db['concurrency']


def f(name, m):
coll.update_many(
{"num": {"$mod": [m, 0]}},
{"$set": {"name": str(name)}},
)
return 1


if __name__ == '__main__':
p = Process(target=f, args=('aa', 2))
p.start()
coll.update_many({}, {"$set": {"name": 'bb'}})
p.join()
docs = coll.find()
d = dict()
for doc in docs:
n = doc['name']
if n not in d.keys():s
d[n] = 0
d[n] += 1
pprint.pprint(d)

最后结果是:

阅读全文 »

【测试人生】测试、策划与开发,谁来把控游戏的质量?

发表于 2019-12-22 | 更新于 2024-04-07 | 分类于 测试人生

近期进入了另外一个项目组,工作沟通的时候遇到了一些碰撞。在和项目组其它伙伴交换意见的同时,自己也开始思考这个问题:测试、策划与开发,这三个主导游戏研发的部门,谁才是真正把控着游戏的质量?

从自己的职业立场与岗位的配置上来看,测试理所应当真正管控游戏的质量,但是实际上又不尽然。从策划和开发的立场上来看,一个关心游戏呈现的效果,一个关心游戏的稳定性,都是广义上的“质量管理”。但实际情况下,许多研发与策划同学会希望测试能专注于提bug,这方面没有什么问题,而希望测试同学只提出经过自己确认后的所谓的bug,这种观点倒是有点不靠谱。

阅读全文 »

【测试人生】小谈游戏测试用例与代码间的联系

发表于 2019-12-06 | 更新于 2024-04-07 | 分类于 测试人生

近几周一直在某SLG项目内负责功能模块测试与周边工具推进的工作,渐渐感悟到了些用例设计与业务代码的联系。

游戏的业务逻辑是比一般应用复杂的。而且对于自己项目这种强玩法的游戏而言,甚至还会出现以下的现象——QA驱动策划,策划驱动开发。

策划案能够大概阐述游戏的界面、逻辑与数值,但是如果有复杂的特例,还需要QA在实际测试中去挖掘。游戏测试用例的设计过程,不仅可以看成是策划案的延伸,而且也可以看作是一份业务代码的参考文档。如果了解游戏服务端与客户端机制,跟进过代码的话,甚至可以根据它们设计一些极端的用例。

好比说,某一个建筑,占地是5x5,但是它横跨国界,一部分在A国,一部分在B国。那么这个建筑,是属于A国,还是B国呢?

阅读全文 »

【从零单排Golang】第五话:用自带net包写一个简单的负载均衡

发表于 2019-11-24 | 更新于 2025-04-04 | 分类于 从零单排Golang

前言

Github传送门

golang在工业中用途最多的方面就是编写中间件以及上游设施,因此切入golang的话,了解其网络库是很有必要的。因此,笔者上手了自带的net包,花了一天左右的时间写了个简单的负载均衡(Load Balancer),也算是能用啦= =

用net包写负载均衡

我们在浏览网页时,通常会遇到服务方故障的情况,提示我们nginx、apache之类的字眼。这些,便都是负载均衡的工作了。

一个负载均衡可能会包含以下的功能:

  • 负载调节
    • 上游连接分配(策略:轮流(roundrobin)、最少连接等)
    • 权重管理
  • 健康检查(业务是否OK)
  • 协议支持
    • tcp、udp
    • http、https
    • 路由代理
    • 数据缓存与压缩
  • 安全
    • 限流,DDOS防护
    • 备用负载均衡

为了实践一下(培养手感),笔者用net包弄了一个基于tcp的简易负载均衡,实现了上述最基础的负载调节与健康检查功能。

首先设计一个struct:

阅读全文 »

【GitHub探索】v语言上手,用vlang写一个聊天应用

发表于 2019-11-16 | 更新于 2024-07-20 | 分类于 GitHub探索

前言

vlang(v语言)自从6月份突然炒热起来,不知不觉到了11月,正式版就要出来了,在11月的GitHub Trending榜中依然排在前10。这着实令人好奇,因此笔者决定试用一下vlang,写一个小应用,体验一下感受。

v语言上手

v语言可以在GitHub传送门中clone下载,支持多操作系统,有以下的特性:

  • 快速编译
  • 快速转译
  • 热更

其余的,还有自带的GUI库、结合Go与Rust的语言特性之类,也可以算作所谓的卖点。

安装v语言也很简单,比如在windows上,首先需要安装Visual Studio提供的MSVC环境,然后只需要:

1
git clone https://github.com/vlang/v.git

然后执行:

1
./make.bat

再设置环境变量到PATH,就能够随时随地执行vlang了。

阅读全文 »

【测试人生】游戏业务用例测试体验感悟

发表于 2019-11-03 | 更新于 2025-07-12 | 分类于 测试人生

近期稍微停歇了下开发的任务,转为进入游戏项目组去探究真正的游戏测试业务是如何进行。在此前做测试工具与平台时会常常遇到业务需求不能准确击中的瓶颈,因此真实投入体验,调研项目组的测试痛点,能够对后续的技术支持工作大有裨益。

游戏,尤其是网游,是一类非常特殊的软件产品,可能会有以下的特点:

  • 服务端与客户端强耦合
  • 各个系统模块间存在复杂的联系,业务复杂度相对于一般的产品高
  • 单体状态的变化,可能影响到多个实体的状态及属性
  • 策划配表数值变动多,迭代频率高
  • 游戏的新功能特性研发,需要牵扯到很多原有的设定
  • etc…

简而言之,游戏是一个高内聚、体量较大、变化需求多的软件系统,因此游戏业务测试本身就是不小的挑战。

项目组现处于刚上线的阶段,主要业务是外网缺陷修复的验收以及新功能的测试及回归。其中,新功能的回归测试在笔者认为是更为艰巨的任务。我们首先可以看一下一个基本的测试用例是怎样的:

阅读全文 »
1…151617…20
ひかり.HDQ

ひかり.HDQ

talk is cheap, code is rich
195 日志
14 分类
417 标签
GitHub Mail CSDN Juejin Steam Bilibili
© 2019 – 2025 ひかり.HDQ
|