Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >六、处理几何数据【ArcGIS Python系列】

六、处理几何数据【ArcGIS Python系列】

作者头像
renhai
发布于 2023-11-24 08:24:17
发布于 2023-11-24 08:24:17
56200
代码可运行
举报
运行总次数:0
代码可运行

1.了解几何对象

要素类中的每个要素都由一个或多个顶点组成,这些顶点定义了点、多段线或多边形要素。在点要素类的情况下,每个点要素由单个顶点组成。多段线和多边形要素由多个顶点组成。每个顶点是由一对x、y坐标定义的位置。该图说明了点、多段线和多边形如何在笛卡尔坐标空间中由顶点定义。

使用几何体对象可以将要素写入要素类,我们可以从坐标值表创建要素。几何对象也可用于地理处理操作,可以在内存中创建几何对象并直接在地理处理工具中使用,而不是创建临时要素类来保存几何。

ArcGIS中主要有五中集合对象:PointMultiPointPointGeometryPolygonPolyline 。ArcPy通常用 arcpy.Geometry 类创建几何对象。Geometry 类的一般语法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
arcpy.Geometry(geometry, inputs, {spatial_reference}, {has_z}, {has_m})

参数

说明

数据类型

geometry

几何类型:点、面、折线或多点。

String

inputs

用于创建对象的坐标。数据类型可以是 Point 或 Array 对象。

Object

spatial_reference

新几何的空间参考。(默认值为 None)

SpatialReference

has_z

Z 状态:如果启用 Z,则为几何的 True,如果未启用,则为 False。(默认值为 False)

Boolean

has_m

M 状态:如果启用 M,则为几何的 True,如果未启用,则为 False。(默认值为 False)

Boolean

此外,ArcPy还使用借助两个类来帮助构建几何图形:ArrayPoint

扩展: 对比Shapely包:Shapely中有PointLineStringPolygonMultiPointMultiLineStringMultiPolygonGeometryCollection,也支持从numpy的array对象创建几何对象。

Point和PointGeometry

Point无空间参考信息,通常是一对点坐标,PointGeometry有空参考信息,是一个几何对象。下面的代码演示了 Point 对象如何使用 PointGeometry 类构造几何对象:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
point = arcpy.Point(4.900160, 52.378424)
pointgeo = arcpy.PointGeometry(point, 4326) # 4326等同于GCS_WGS_1984

Polyline

多段线和多边形要素由多个顶点组成,并使用两个或多个 Point 对象构造。为便于处理多个 Point 对象,ArcPy使用 Array 类。此类专门为构造多段线和多边形几何对象而创建。以下示例显示如何使用两个 Point 对象创建一个 Polyline 对象:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
point1 = arcpy.Point(0, 0)
point2 = arcpy.Point(100, 100)
array = arcpy.Array([point1, point2])
polyline = arcpy.Polyline(array)

print(polyline.length)
>>> 141.4213562373095

可以创建多个几何体对象,并使用几何体对象的方法直接比较它们。例如,下面的代码创建了两个 Polyline 对象,并确定它们是否相互交叉:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import arcpy
point1a = arcpy.Point(0,0)
point1b = arcpy.Point(100, 100)
point2a = arcpy.Point(100, 0)
point2b = arcpy.Point(0, 100)
array1 = arcpy.Array([point1a, point1b])
array2 = arcpy.Array([point2a, point2b])

polyline1 = arcpy.Polyline(array1)
polyline2 = arcpy.Polyline(array2)

print(polyline1.crosses(polyline2))
>>> True # 两条折线在位置(5050)相交。

Polygon

创建 Polygon 对象的语法和Polyline类似,但有意义的面要素至少需要三个 Point 对象。

2.读取几何对象属性

我们已经理解了几何对象,现在可以通过搜索游标来访问要素类的几何对象。再此之前我们要先了解**几何令牌**:

几何令牌可以作为快捷方式来替代访问完整几何对象。附加几何令牌可用于访问特定几何信息。访问完整几何往往更加耗时。如果只需要几何的某些特定属性,可使用令牌来提供快捷方式从而访问几何属性。例如,SHAPE@XY 会返回一组代表要素质心的 x,y 坐标。常用的几何令牌有:

令牌

说明

SHAPE@

要素的几何对象。

SHAPE@XY

一组要素的质心 x,y 坐标。

SHAPE@Z

要素的双精度 z 坐标。

SHAPE@AREA

要素的双精度面积。

SHAPE@LENGTH

要素的双精度长度。

我们结合游标和几何令牌探索Point要素的坐标:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fc = "./resource/第七次人口普查数据/中国各城市中心/中国各城市中心.shp"
with arcpy.da.SearchCursor(fc, ["SHAPE@XY", "city"]) as cursor: # 返回几何对象的特定值,此处为xy坐标,元祖格式
    for row in cursor:
        x, y = row[0] # 解开元祖
        city = row[1]
        print(f"{city}中心点坐标: {x}, {y}") # 打印点坐标
    
>>> 北京市中心点坐标: 116.39904202900004, 39.90358526800003
天津市中心点坐标: 117.18386143100008, 39.124546990000056
石家庄市中心点坐标: 114.49643611600004, 38.04481885200005
......
......
我们结合游标和几何令牌探索Polygon要素的坐标:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import arcpy
arcpy.env.workspace = "C:/Data/Demo.gdb"
fc = "pipes"
with arcpy.da.SearchCursor(fc, ["OID@", "SHAPE@"]) as cursor: # 使用字符串 "OID@" 引用唯一标识符字段。  
 for row in cursor:
  print("Feature {0}: ".format(row[0]))
   for point in row[1].getPart(0): 
    print("{0}, {1}".format(point.X, point.Y))

getPart()方法用于获取几何形状的各个部分,这里使用索引0表示获取第一部分。对于只有一个部分的要素类,第一个部分也是唯一的部分。图示就是一个包含多个多边形的多部分集合图形。

image-20230810162922634

多边形要素类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import arcpy
arcpy.env.workspace = "C:/Data/Demo.gdb"
fc = "parcels"
 with arcpy.da.SearchCursor(fc, ["OID@", "SHAPE@"]) as cursor:
  for row in cursor:
   print("Feature {0}: ".format(row[0]))
    for point in row[1].getPart(0):
     print(f"{point.X:.2f}, {point.Y:.2f}") # `{point.X:.2f}`表示将`point.X`的值格式化为浮点数,并保留两位小数。等同于`print("{0:.2f}, {1:.2f}".format(point.X, point.Y))`

image-20230810162738533

会输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Feature 1: 
427837.21, 5450864.65
427837.80, 5450898.34
427842.31, 5450898.89
427846.84, 5450899.18
427851.39, 5450899.24
427859.98, 5450899.11
427859.42, 5450867.42
427837.21, 5450864.65

示例三:

多部分几何图形

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import arcpy
arcpy.env.workspace = "C:/Data/Demo.gdb"
fc = "multipart_features"
with arcpy.da.SearchCursor(fc, ["OID@", "SHAPE@"]) as cursor:    
 for row in cursor:        
    print("Feature {0}: ".format(row[0]))        
    partnum = 1        
    for part in row[1]:            
      print("Part {0}:".format(partnum))            
      for point in part:                
        print("{0}, {1}".format(point.X, point.Y))            
      partnum += 1

会输出:

3.写入几何数据

如果你熟悉对geopandas更加熟悉,推荐使用geopandas和shapely。实际使用的时候更多的还是从csv、json构建几何对象,还是直接读取shp、geojson等文件,这些库处理起来都会比arcpy顺手很多。

有两种方法写入几何数据:使用arcpy.CopyFeatures_management()将几何对象复制到要素类和使用arcpy.da.InsertCursor()插入游标。

arcpy.CopyFeatures_management()可以让代码更加简洁,但是也有缺点:

  • 复制几何图元时不能创建或更新特征的属性。因此,如果必须同时创建新要素和属性值,则必须使用游标。
  • 创建许多要素(尤其是由许多顶点组成的要素)可能会降低性能,因为必须同时将所有几何图形对象加载到内存中,才能将它们复制到要素类。使用游标时,可以在游标对象上的每次迭代中创建每个新特征,这样可以在处理许多特征时获得更好的性能。

下面我们从x,y坐标对列表创建新多边形要素的完整实例来看两种方法的区别,首先演示**使用arcpy.CopyFeatures_management()**:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import arcpy
point = arcpy.Point()
array = arcpy.Array()
coordinates = [[3116036.11, 10071403.50], [3115768.36, 10071482.07], [3115847.82, 10071747.21], [3116114.23, 10071667.17]] # 列表形式的坐标

# 接下来,代码遍历坐标对列表,并在每次迭代中创建一个新的 Point 对象。
for coord in coordinates:
  point.X = coord[0]
  point.Y = coord[1]
  array.add(point)
  
# 将array对象构造成多边形
polygon = arcpy.Polygon(array, 2277) 

# 将内存中的多边形创建为数据库的新要素
arcpy.CopyFeatures_management(polygon, fc)

使用arcpy.da.InsertCursor()插入游标

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import arcpy
point = arcpy.Point()
array = arcpy.Array()
coordinates = [[3116036.11, 10071403.50], [3115768.36, 10071482.07], [3115847.82, 10071747.21], [3116114.23, 10071667.17]] # 列表形式的坐标

# 接下来,代码遍历坐标对列表,并在每次迭代中创建一个新的 Point 对象。
for coord in coordinates:
  point.X = coord[0]
  point.Y = coord[1]
  array.add(point)
  
# 将array对象构造成多边形
polygon = arcpy.Polygon(array) # , 2277可省略

# 将内存中的多边形创建为数据库的新要素
fgdb = "C:/Data/Demo.gdb"
fc = "newpoly"
arcpy.env.workspace = fgdb
# 先创建一个空要素
arcpy.CreateFeatureclass_management(fgdb, fc, "Polygon",                                     "", "", "", 2277)
# 将多边形插入
with arcpy.da.InsertCursor(fc, "SHAPE@") as cursor:    
  cursor.insertRow([polygon])

结果如图(显示的顶点是为了强调):

image-20230810170736165

你也可以从硬盘中读取坐标点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
filename = "coordinates.txt"

with open(filename, "r") as file:
    coordinates = [line.strip().split(",") for line in file]

# 打印坐标列表
print(coordinates)

总的来说,Arcpy中的几何对象可以提高代码的效率,大部分几何对象函数创建返回的对象也是几何对象,避免了创建临时要素类和使用光标读取所有要素的步骤。


示例:从excel表格制作分年龄的人口普查要素文件

代码文件在4.2.7-处理几何数据代码练习和示例2.ipynb

此示例演示了如何通过表格数据制作分年龄、性别的人口_省份等级.shp文件,把人口数据在空间上呈现。通常,这是做研究的基础工作,方便了解我们数据在空间上是如何分布的,比如横向对比每个省份之间的总人口差异有哪些,每个省份年龄构成差异有哪些,年龄结构和经济的关系,你可以纵向对比多次人口普查在空间上的差异,这些都是可以进行深挖的方向。

为此我们准备的数据有:

  1. 中国34个省市区的空地图:中国各省份地图.shp
  2. 分年龄的人口统计数据:中国第七次人口普查-分年龄_性别的人口数据.xlsx
方法一:通过Python的pandas和geopandas处理

如果你需要在arcpy的环境下安装库,推荐用conda安装环境,避免库之间的冲突,出现错误了也能够回滚环境。geopandas通过运行 conda install geopandas -c esri 来安装。

1.读取excel文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd
df = pd.read_excel("./resource/data2/中国第七次人口普查-分年龄_性别的人口数据.xlsx")
df.head()

通过对比上述df对象和原始表格,首先发现,表头需要处理,要将合并的单元格拆散,比如年龄0岁拆分成0岁男和0岁女。然后,表格中包含有省级的也有市县一级的数据,我们只需要省级信息,只是表格没有可以供筛选的字段,我们可以下一步通过pandas合并表格的时候直接扔掉不匹配的行。最后需要注意的是,表格内无港澳台人口信息,因为第七次人口普查就没有统计,但是地图必须有港澳台!!!:

表2 分年龄、性别的人口(全部数据).xlsx

2.处理dataframe

我们初步处理此dataframe,首先删除空值,去除第一行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df = df.dropna(axis=0, how='all') 
df = df.drop(1, axis=0).reset_index(drop=True)
df.head()

重命名列名:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 此处直接指定列名
fields = [
    "Province",
    "M0",
    "F0",
    "M1_4",
    "F1_4",
    "M5_9",
    "F5_9",
    "M10_14",
    "F10_14",
    "M15_19",
    "F15_19",
    "M20_24",
    "F20_24",
    "M25_29",
    "F25_29",
    "M30_34",
    "F30_34",
    "M35_39",
    "F35_39",
    "M40_44",
    "F40_44",
    "M45_49",
    "F45_49",
    "M50_54",
    "F50_54",
    "M55_59",
    "F55_59",
    "M60_64",
    "F60_64",
    "M65_69",
    "F65_69",
    "M70_74",
    "F70_74",
    "M75_79",
    "F75_79",
    "M80_84",
    "F80_84",
    "M85+",
    "F85+"
]
df.columns = fields

命名之后的数据:

image-20230813115106174

删除不需要的第一行数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df = df.drop(0, axis=0).reset_index(drop=True)
df.head()

image-20230813115133806

3.读取省份地图

我们用geopandas读取地图数据,然后用pandas读取人口数据,然后通过merge方法进行匹配,最后用geopandas导出为shp文件。

读取地图用geopandas

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import geopandas as gpd
gdf = gpd.read_file("./resource/data2/中国分省份空地图/中国各省份地图.shp", encoding="utf-8")
gdf.head()

image-20230813120628597

4.进行数据合并
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gdf_new = pd.merge(gdf, df, left_on="省", right_on="Province", how="left").drop("Province", axis=1)
gdf_new.head()

合并数据如下:

image-20230813120720612

查看尾部数据,可以看到,我们的数据集中包含了中国的34个省级行政区,以及港澳台地区。只不过港澳台地区的数据是空的,因为我们的数据集中没有这些地区的数据。

5.处理数据类型

人口数量字段肯定是数字类型,我们通过astype将字段转化为整数型:

可以先查看数据类型,将人口字段转换为整数型int:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gdf_new.dtypes
>>>
省             object
省级码            int64
geometry    geometry
M0            object
F0            object
M1_4          object
F1_4          object
M5_9          object
F5_9          object
.....................
M85+          object
F85+          object
dtype: object

将数据列转化为整数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 选取需要转换的列
cols_to_convert = gdf_new.columns[3:]  
# 应用匿名函数进行转换
gdf_new[cols_to_convert] = gdf_new[cols_to_convert].apply(lambda x : x.astype(int) if not pd.isnull else x)   
# 再次查看类型
gdf_new.dtypes
>>>
省             object
省级码            int64
geometry    geometry
M0            object
F0            object
M1_4          object
F1_4          object
M5_9          object
F5_9          object
....................
F75_79        object
M80_84        object
F80_84        object
M85+          object
F85+          object
dtype: object

6.保存为shp文件:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import os
if not os.path.exists("./resource/data2/output"):
    os.mkdir("./resource/data2/output")
gdf_new.to_file("./resource/data2/output/分年龄、性别的人口_省份等级_方法1.shp", encoding="utf-8", driver="ESRI Shapefile",  engine="pyogrio") # pip安装pyogrio

我本来用的中文列名。然后遇到了编码问题。最后还是老老实实把字段写成英文,就没问题了。


方法二:使用Arcpy的游标来管理数据

此方法如果只用arcpy的游标更新数据,相对来说没有merge方便。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import arcpy
import pandas as pd
import os

# 继续用这个表格 
df.head()
1.创建数据库和要素

我们先创建数据库,然后将数据导入到数据库中,这样就可以避免覆盖原有的数据了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
arcpy.env.workspace = "./resource/data2"
arcpy.env.overwriteOutput = True

# 创建一个数据库来操作 避免覆盖
if os.path.exists("./resource/data2/output.gdb") == False:
    arcpy.management.CreateFileGDB("./resource/data2", "output.gdb")
    
# 1.选择空的分省份地图要素
fc = "./resource/data2/中国分省份空地图/中国各省份地图.shp"

# 复制到数据库
arcpy.conversion.FeatureClassToFeatureClass(fc, "./resource/data2/output.gdb", "分年龄、性别的人口_省份等级_方法2")

查看此要素,为无人口数据的空地图:

fc

2.进行arcpy的字段操作:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 3.添加人口字段
new_field = df.columns[1:].tolist()

# 使用插入游标添加字段
for field in new_field:
    arcpy.management.AddField("output.gdb/分年龄、性别的人口_省份等级_方法2", field, "LONG")
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 列出字段 发现字段名被arcgis规整化了
gis_field = [field.name for field in arcpy.ListFields("output.gdb/分年龄、性别的人口_省份等级_方法2")]
gis_field = gis_field[2:3] + gis_field[6:]
gis_field
>>>
['省',
 'M0',
 'F0',
 'M1_4',
 'F1_4',
 'M5_9',
 'F5_9',
 'M10_14',
 'F10_14',
 'M15_19',
 'F15_19',
 'M20_24',
 'F20_24',
 'M25_29',
 'F25_29',
 'M30_34',
 'F30_34',
 'M35_39',
 'F35_39',
 'M40_44',
 'F40_44',
 'M45_49',
 'F45_49',
 'M50_54',
 'F50_54',
 'M55_59',
 'F55_59',
 'M60_64',
 'F60_64',
 'M65_69',
 'F65_69',
 'M70_74',
 'F70_74',
 'M75_79',
 'F75_79',
 'M80_84',
 'F80_84',
 'M85_',
 'F85_']
3.使用游标添加数据,通过省份字段匹配:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
with arcpy.da.UpdateCursor("output.gdb/分年龄、性别的人口_省份等级_方法2", gis_field
) as cursor:
    for i, row in enumerate(cursor):
        # 通过游标所在行的"省"字段匹配df中"Province"的字段
        filtered_df = df[df['Province'] == row[0]]
        # 判断是否匹配
        if filtered_df.empty:
            # 如果不匹配此dataframe为空
            print("不匹配")
        else:
            print("匹配")
            
            # 赋值
            for j, field in enumerate(gis_field[1:]):
                # 因为gis把字段规整化了 有两个例外我们替换一下
                if field == "F85_":
                    field = "F85+"
                elif field == "M85_":
                    field = "M85+"
                                
                row[j+1] = filtered_df.loc[:, field].values[0] # 这里的j+1是因为gis_field中去掉了"省"字段
            
            # 最后执行更新游标
            cursor.updateRow(row)
            
            # break # 测试用

运行完整之后和原始df对比一下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df.iloc[0, :]
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Province        北京市
M0            79388
F0            73342
M1_4         447165
F1_4         416355
M5_9         485161
F5_9         447792
M10_14       335714
F10_14       306590
M15_19       345715
F15_19       287842
M20_24       715999
F20_24       634503
M25_29       995896
F25_29       908792
M30_34      1309189
F30_34      1193840
M35_39      1108136
F35_39      1035049
M40_44       838444
F40_44       763689
M45_49       842337
F45_49       776237
M50_54       842484
F50_54       777307
M55_59       828013
F55_59       799526
M60_64       677025
F60_64       709505
M65_69       568385
F65_69       626286
M70_74       314838
F70_74       353703
M75_79       184665
F75_79       230508
M80_84       152087
F80_84       196699
M85+         124749
F85+         160140
Name: 0, dtype: object
4.更改别名

更改arcgis属性表中的别名,方便阅读

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
alias = [
    "男性0岁人口",
    "女性0岁人口",
    "男性1-4岁人口",
    "女性1-4岁人口",
    "男性5-9岁人口",
    "女性5-9岁人口",
    "男性10-14岁人口",
    "女性10-14岁人口",
    "男性15-19岁人口",
    "女性15-19岁人口",
    "男性20-24岁人口",
    "女性20-24岁人口",
    "男性25-29岁人口",
    "女性25-29岁人口",
    "男性30-34岁人口",
    "女性30-34岁人口",
    "男性35-39岁人口",
    "女性35-39岁人口",
    "男性40-44岁人口",
    "女性40-44岁人口",
    "男性45-49岁人口",
    "女性45-49岁人口",
    "男性50-54岁人口",
    "女性50-54岁人口",
    "男性55-59岁人口",
    "女性55-59岁人口",
    "男性60-64岁人口",
    "女性60-64岁人口",
    "男性65-69岁人口",
    "女性65-69岁人口",
    "男性70-74岁人口",
    "女性70-74岁人口",
    "男性75-79岁人口",
    "女性75-79岁人口",
    "男性80-84岁人口",
    "女性80-84岁人口",
    "男性85岁以上人口",
    "女性85岁以上人口"
]

for i, field in enumerate(gis_field[1:]): 
    arcpy.management.AlterField("output.gdb/分年龄、性别的人口_省份等级_方法2", field, "" , alias[i])

更改别名后的属性表:

5.导出为shp文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
in_features = "output.gdb/分年龄、性别的人口_省份等级_方法2"
out_features = "output/分年龄、性别的人口_省份等级_方法2.shp"

arcpy.conversion.ExportFeatures(in_features, out_features)

image-20230813122447208

最终我们通过两种方法生成了shp文件。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-09-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 renhailab 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
20+最好的开源自动化测试工具
这些开源工具在自动化测试和手动测试、功能、回归、负载、性能、压力和单元测试、web、移动和桌面测试等领域提供相关的能力支持。
苦叶子
2019/05/30
9.4K0
测试人员必备:常用自动化测试工具
官网:https://software.microfocus.com/en-us/products/unified-functional-automated-testing/overview
测试开发技术
2021/11/04
3.6K0
2024年最佳软件测试工具40强清单
软件测试工具是指那些支持从计划、需求收集、构建创建、测试执行、缺陷记录到测试分析等各种测试活动的产品。这些工具主要用于检测软件的稳定性、彻底性以及其他性能参数。
wangmcn
2024/04/15
1.6K0
2024年最佳软件测试工具40强清单
初识Katalon Studio自动化测试工具
实施自动化测试之前,我们总会调研哪些工具易用,免费,容易和其他工具或者框架集成。做 Web 自动化测试我们经常选择Selenium,因为它开源免费,支持不同的开发语言,还有录制功能,从一定程度上减少了测试人员开发脚本的成本;做App自动化测试我们通常选择 Appium,它也是开源免费,同时支持 Android 和 IOS 两大操作系统,支持不同的语言开发脚本,同时能测试原生和混合应用。但这两种工具需要结合其他的测试框架来管理我们的测试案例,比如Jnuit、unittes、NUnit 等,这就要求测试人员有较高的编码技能。
软测小生
2019/07/05
4.7K0
初识Katalon Studio自动化测试工具
2019年最佳自动化测试工具(前10名)
对更快地交付高质量软件或 “Quality at Speed” 的需求要求组织在敏捷、持续集成 (CI) 和 DevOps 方法中搜索解决方案。测试自动化是这些方面的重要组成部分。最新的世界质量报告 2018-2019 表明,测试自动化是实现 “Quality at Speed” 的最大瓶颈,因为它是成功实施敏捷和DevOps的推动者。
软测小生
2019/07/05
9.1K0
2019年最佳自动化测试工具(前10名)
十大自动化测试工具,你在用哪些?
近年来,随着DevOps和敏捷过程越来越广泛地被采用,软件测试、特别是自动化测试得到了迅速的发展。DevOps希望建立一个快速、频繁、可靠的一体化交付过程;敏捷则要求对交付件质量进行持续、及时、全面的反馈。软件测试作为研发过程中的重要环节,其能否达到快速响应、有效度量,实现过程自动化、系统一体化的目标,对整个组织的研发效率和产品质量将产生深远的影响。
陈哥聊测试
2021/07/29
2.1K0
Katalon Studio一款免费的自动化测试工具
自动化测试是软件测试领域一直比较火热的话题。这些年来,大家都在追求简洁、易用、稳定的方向。有一些工具能够有助于创建简单易行的脚本,但是使用起来却很麻烦。而其他相对简单一些的工具,在测试过程中又总会出现一些问题。所以在选择使用何种测试工具的时候,我们总是得此失彼。一款好的自动化测试工具可以解决以上基本问题,更何况这款工具功能强大开源免费。那么,你何乐而不为呢?
Altumn
2019/10/21
4.1K0
Katalon Studio一款免费的自动化测试工具
国内外优秀好用的自动化测试有哪些?终于整理出来了
随着自动化测试的不断发展,各种自动化测试工具五花八门眼花缭乱,测性能,测兼容,测压力,测功能,测接口纷繁复杂。今天我们主要分析的是国内外使用最多,功能相对而言更全,技术更成熟和先进的几款代表性的自动化功能测试工具的汇总分析。
顾翔
2020/09/23
3.3K0
国内外优秀好用的自动化测试有哪些?终于整理出来了
测试人员必看-做好自动化测试的7大技能
随着敏捷和DevOps等新时代项目开发方法逐渐取代旧的瀑布模型,测试需求在业界不断增长。测试人员现在正在与开发人员一起工作,自动化测试在许多方面极大地取代了手动测试。自动化测试人员的数量增长,也极大地增加了测试行业的竞争,要想在茫茫测试人员中脱颖而出,首先要掌握以下七大技能。
优测云服务平台
2019/12/31
2.4K0
测试人员必看-做好自动化测试的7大技能
ChatGPT推荐最常用的自动化测试、性能、安全测试工具!
ChatGPT是一种当前被广泛关注的人工智能技术,它具备生成自然语言的能力,能够完成一些简单的文本生成、对话交互等任务。ChatGPT 算法的出现,打破了以前自然语言处理的瓶颈,使得机器具备了更加贴合人类想法的表达能力,也让人类在处理海量自然语言数据面前得到了很大的帮助。
测试开发技术
2023/04/05
2.4K0
自动化测试实践清单
不能否认手动测试将始终保持重要地位,但对自动化测试的需求却在不断增长。自动化测试为公司和团队带来许多好处:效率更高,覆盖面更广。本文分享测试自动化策略的周期的7个阶段中的一些最佳实践,以最大限度地提高自动化测试的效能。
FunTester
2020/12/09
5270
2022 年全球十大最佳自动化测试工具
自动化测试是指运行软件程序后,自动执行测试用例并在没有任何人为干预的情况下产生测试结果。它比手动测试更优越的地方在于,很大程度上节省了人力和时间,并且在测试中没有或者少有错误。此外,还可以多次测试相同的应用程序,从而最大限度地减少冗余的手动工作。
wencheng
2022/04/18
2.4K0
2022 年全球十大最佳自动化测试工具
9款开源自动化测试框架!
自动化测试框架由一组最佳实践,通用工具和库组成,可帮助测试人员评估多个Web和移动应用的功能,安全性,可用性和可访问性。而在,软件开发世界中有很多的自动化测试框架,该如何选择?
测试开发技术
2021/12/13
3.7K0
9款开源自动化测试框架!
2020年排名前20位的最佳自动化测试工具(综合列表)
全球有4,000多家公司使用Ranorex Studio(一种用于台式机,Web和移动应用程序测试的多合一工具)。对于初学者来说,无代码的即点即用界面非常容易,但对于具有完整IDE的自动化专家而言,功能却很强大。
用户7466307
2020/06/16
3.1K0
2020年排名前20位的最佳自动化测试工具(综合列表)
2021年软件测试工具大全(自动化、接口、性能、安全、测试管理)
根据 Tricentis 主导的一项全球调查为我们提供了几个有关测试趋势的重要观察。趋势表明,团队倾向于使用功能测试(自动化测试)。
测试开发技术
2021/12/22
4.4K0
成为自动化测试的7种技能
当我开始担任手动测试人员时,我不喜欢编码。但是,当我逐渐进入自动化领域时,对我来说很清楚,如果没有对编程语言的一些基本了解,就无法编写逻辑自动化测试脚本。
FunTester
2019/10/23
7750
2020 可替代Selenium的测试框架Top15
业界有一些强大的工具可以替代Selenium,今天就来大概介绍一下。以下清单是精挑细选的Selenium替代框架:
软测小生
2020/04/02
5.2K0
2020 可替代Selenium的测试框架Top15
应用实践|自动化测试工具应用实践
在当前社会项目市场需求的场景下,项目需求不明确、项目根据市场需求的日益变化而频繁变更、项目时间短且需要快速交付给甲方,敏捷开发俨然成为了很多项目团队的不二之选,而在敏捷开发中,测试工作也是很重要的一个环节,只有通过测试的软件,才能交付到客户的手中。测试工作能在敏捷开发中确保软件质量,提高用户体验,减少软件应用过程中的风险,确保软件的合规使用,保持良好的客户关系担任了一个重要的角色。
六月暴雪飞梨花
2024/10/28
2760
应用实践|自动化测试工具应用实践
如何选择合适的自动化测试工具?
自动化测试是高质量软件交付领域中最重要的实践之一。在今天的敏捷开发方法中,几乎任一软件开发过程都需要在开发阶段的某个时候进行自动化测试,以加速回归测试的工作。自动化测试工具可以帮助测试人员以及整个团队专注于自动化工具无法处理的各自任务,但困难的部分就是选择自动化工具。事实上,测试人员最常见的问题就是,如何选择适宜的自动化测试工具?
陈哥聊测试
2022/07/07
4340
2021年软件测试领域常用工具总结(2):接口测试工具、UI测试工具
大家好,我是洋子。接口(API)测试对我们来说已经很常见了,目前很多公司都会招聘服务端测试工程师进行接口测试。因为在测试三层金字塔当中,接口测试位于中间层,做接口测试性价比较高,容易以较低成本暴露发现服务端的问题,同时也可以进行接口自动化测试,提高接口测试的效率
Bug挖掘机
2022/09/28
3.5K0
2021年软件测试领域常用工具总结(2):接口测试工具、UI测试工具
推荐阅读
相关推荐
20+最好的开源自动化测试工具
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验