如何测试一个OA系统

本文目录结构

前言

笔者未曾做过纯软件测试,所以接到一个自己不太熟悉的任务,对我来说还是有一些挑战的,如何从容应对方法很重要,以下整理了整个测试过程中的思考,是一个复盘过程也是一个总结,供大家参考同时也希望有什么建议或不足之处能给我留言,交流共同成长。

项目背景

对一个产品做系统测试并不等于产品就会有好的质量,所以要提升产品质量还要有策略,即测什么、怎么测再把这两个问题细化一下,如:

  • 要测试系统的背景、用户人群都都是什么?
    定位系统使用人群。系统是内部的人员管理系统,已经上线半年有余,系统还在持续迭代过程中,使用人群包括内部所有员工和管理人员。

  • 测试的目标是什么?
    系统并非0-1的过程,已经是开发出来的并在持续迭代中,最近一次迭代主要修改了系统的底层接口,系统运营过程中也出现了一些越权的安全漏洞,所以本次测试重点还是要保障系统逻辑安全

  • 测试的对象和范围是什么?
    OA系统通过腾讯云的微搭开发,通过公司内部系统进行鉴权登陆。OA系统与微搭的边界就是业务逻辑层和底座微搭,我们测试的目标主要还是针对业务逻辑层。

  • 测试的重点和难点是什么?

    • 测试重点:逻辑和安全是首要,另外,根据系统设计文档结合产品的建议,对部分重点模块进行划分并抓要点进行测试。
    • OA系统逻辑中有很多需要依赖其他如邮件系统、登陆系统、数据源系统、很多环境模拟成本较高或操作低频(如数据源同步系统到OA,每日用demon同步) 类似的建议放在最后的UAT阶段,由产品、开发和测试一起模拟演示时来验收。
  • 测试的深度和广度是什么?
    测试的广度与深度,需要从测试用例角度、项目时间维度的结合来看。从广度上看重点是测试系统的本身,其次是系统的周边依赖;测试深度要看用户画像和用户使用系统的行为路径。

  • 如何安排测试活动?
    有了测试广度和深度,还要看测试的项目周期并倒退。本测试周期大约有20工作日,按测试用例每人每天能处理100~150之间,前期因测试人员对系统的不了解,保守估计测试用例覆盖在每日100个左右。所以,还要根据时间来对测试用例进行分类,并保障重点的测试用例能覆盖到。

测试过程

前期准备

系统测试首先要了解系统的业务逻辑,特别当前测试的OA系统业务逻辑性还是比较强的,这里可以从产品经理拿到系统设计的原型图、设计文档、需求场景文档和各种规范等,通过文档加深对系统的了解,更高效的方法是请产品经理来讲解这些文档,并围绕重点场景中重点问题来做分析讲解。

Read More

通过Python在网站自动发送评论

通过selenium来实现,如果没有安装Python和Selenium,需要先安装,以下是我的环境测试通过的脚本。

环境信息

python版本。

1
2
python --version
Python 3.10.8

selenium 版本。

1
2
3
4
5
6
7
8
9
10
11
pip show selenium
Name: selenium
Version: 4.14.0
Summary:
Home-page: https://www.selenium.dev
Author:
Author-email:
License: Apache 2.0
Location: /usr/local/lib/python3.10/site-packages
Requires: certifi, trio, trio-websocket, urllib3
Required-by:

Read More

Kubernetes零基础入门课程

本案例通过以腾讯云为主要搭建环境,使用CentOS7.9系统。

参考文章
官网文档:https://kubernetes.io/zh-cn/docs/home/
Kubernetes(k8s) YAML文件详解:https://blog.csdn.net/qq_35745940/article/details/120169421
kubernetes:https://k8s.easydoc.net/docs/dRiQjyTY/28366845/6GiNOzyZ/9EX8Cp45

多机搭建集群环境

首先在腾讯云购买三台服务器,一台Master和两台Node,需要在同一个vpc下。

按每台机器的角色分别设置hostname。

1
2
3
4
# 每个节点分别设置对应主机名
hostnamectl set-hostname master
hostnamectl set-hostname node1
hostnamectl set-hostname node21

所有节点都要设置hostname。

1
2
3
4
vim /etc/hosts
10.0.1.144 master
10.0.1.95 node1
10.0.1.50 node2

Read More

ConfigMap & Secret

ConfigMap

容器中通常存放程序代码、二进制程序,如密码、配置文件等一些变量可以通过ConfigMap来存储,创建
ConfigMap.yaml。

1
2
3
4
5
6
apiVersion: v1
kind: ConfigMap
metadata:
name: mongo-config
data:
mongoHost: mongodb-0.mongodb

应用yaml文件。

1
2
3
4
# 应用
kubectl apply -f configmap.yaml
# 查看
kubectl get configmap mongo-config -o yaml

Secret

secret.yaml

1
2
3
4
5
6
7
8
9
10
apiVersion: v1
kind: Secret
metadata:
name: mongo-secret
# Opaque 用户定义的任意数据,更多类型介绍 https://kubernetes.io/zh/docs/concepts/configuration/secret/#secret-types
type: Opaque
data:
# 数据要 base64。https://tools.fun/base64.html
mongo-username: bW9uZ291c2Vy
mongo-password: bW9uZ29wYXNz

Read More

Kubernetes基础

本文目录结构

虚拟机与容器的区别

虚拟机(Virtual Machine, VM)和容器(Container)是两种不同的虚拟化技术,它们在资源隔离、部署和扩展、操作系统支持等方面有着各自的特点和优劣。

  • 资源隔离: 虚拟机通过在物理硬件上创建完整的虚拟操作系统环境,使得每个虚拟机拥有独立的操作系统和应用程序,彼此之间资源隔离。而容器技术通过将应用程序及其运行环境打包成容器,容器之间共享同一个操作系统内核,使得容器之间资源相互隔离。
  • 部署和扩展: 虚拟机需要安装和配置相应的操作系统,部署和扩展相对繁琐。容器只需将应用程序及其运行环境打包成一个容器镜像,然后通过容器引擎在集群中部署和扩展。这使得容器在部署和扩展方面更加轻量级和灵活。
  • 操作系统支持: 虚拟机通过虚拟化技术提供完整的操作系统环境,可以运行任何支持的操作系统。容器技术通常支持一个或多个应用程序及其运行环境,只能运行在特定的操作系统上。
  • 资源占用: 虚拟机需要为每个虚拟机分配独立的操作系统资源,因此资源占用较高。容器共享同一个操作系统内核,资源占用相对较低。
  • 安全性: 虚拟机之间通过虚拟化层隔离,安全性较高;容器之间通过操作系统内核隔离,安全性相对较低。
  • 应用场景: 虚拟机适用于需要运行不同操作系统或对资源隔离要求较高的场景,如数据库、Web服务器等。容器适用于微服务架构下的应用程序开发、部署和扩展,以及轻量级、需要快速启动的场景,如Web应用程序、API服务等。

容器技术

容器技术是指将应用程序及其依赖项打包在一起,形成一个独立的单元,可以在任何支持容器运行时环境的操作系统上运行。容器技术的主要优点包括易于移植、可扩展、易于管理、易于组合和隔离。常见的容器技术包括Docker、rkt、containerd等。以Docker为例本质由命名空间cgroup镜像三块组成。

Read More

StatefulSet & 数据持久化

本文目录结构

设置有状态服务(StatefulSet)

创建有状态的Pod,执行”kubectl apply -f mongo.yaml“。

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
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mongodb
spec:
serviceName: mongodb
replicas: 3
selector:
matchLabels:
app: mongodb
template:
metadata:
labels:
app: mongodb
spec:
containers:
- name: mongo
image: mongo:4.4
# IfNotPresent 仅本地没有镜像时才远程拉,Always 永远都是从远程拉,Never 永远只用本地镜像,本地没有则报错
imagePullPolicy: IfNotPresent
---
apiVersion: v1
kind: Service
metadata:
name: mongodb
spec:
selector:
app: mongodb
type: ClusterIP
# HeadLess
clusterIP: None
ports:
- port: 27017
targetPort: 27017

以上mongo.yaml包涵了创建StatefulSet特性的pod和Service,关于StatefulSet特性:

  • Service 的 CLUSTER-IP 是空的,Pod 名字也是固定的。
  • Pod 创建和销毁是有序的,创建是顺序的,销毁是逆序的。
  • Pod 重建不会改变名字,除了IP,所以不要用IP直连

查看创建的pods。

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
kubectl get endpoints mongodb -o yaml
apiVersion: v1
kind: Endpoints
metadata:
annotations:
endpoints.kubernetes.io/last-change-trigger-time: "2023-10-18T09:13:07Z"
creationTimestamp: "2023-10-18T09:13:07Z"
labels:
service.kubernetes.io/headless: ""
name: mongodb
namespace: default
resourceVersion: "218593"
selfLink: /api/v1/namespaces/default/endpoints/mongodb
uid: 448feace-dbd8-4c94-b878-688566266bcb
subsets:
- addresses:
- hostname: mongodb-0
ip: 172.17.0.14
nodeName: vm-1-127-centos
targetRef:
kind: Pod
name: mongodb-0
namespace: default
resourceVersion: "212661"
uid: a265b68e-1aaf-409a-b84e-2f2851061314
- hostname: mongodb-1
ip: 172.17.0.15
nodeName: vm-1-127-centos
targetRef:
kind: Pod
name: mongodb-1
namespace: default
resourceVersion: "212671"
uid: 578c3937-6c06-4ef3-bcda-8bd5f594607d
- hostname: mongodb-2
ip: 172.17.0.16
nodeName: vm-1-127-centos
targetRef:
kind: Pod
name: mongodb-2
namespace: default
resourceVersion: "212685"

这时可以连接到mongodb上进行写入数据测试。

Read More