展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > 如何利用Java工具类生成测试数据进行联调?

如何利用Java工具类生成测试数据进行联调?

java联调生成测试数据工具类在日常的联调中,我们经常需要准备一定数量的测试数据,用来配合前端测试。当然对于简单的数据类型完全可以通过JDK自带的Random类来实现。但是参数的格式有特殊要求的时候,临时处理比较麻烦,这个时候就需要借助一些现存的工具类生成测试数据。代码importjava.math.BigDecimal;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Date;importja

本文目录

      java联调生成测试数据工具类

      在日常的联调中,我们经常需要准备一定数量的测试数据,用来配合前端测试。

      当然对于简单的数据类型完全可以通过 JDK 自带的 Random 类来实现。

      但是参数的格式有特殊要求的时候,临时处理比较麻烦,这个时候就需要借助一些现存的工具类生成测试数据。

      代码

      import java.math.BigDecimal;
      import java.text.ParseException;
      import java.text.SimpleDateFormat;
      import java.util.Date;
      import java.util.Random;
      
      
      public class TestDataUtils {
      
          //复姓出现的几率(0--100)
          private static int surnameProbability = 5;
          private static Random random = new Random();
          private static String familyOneName = "赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻水云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任" +
                  "袁柳鲍史唐费岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅卞齐康伍余元卜顾孟平黄和穆萧尹姚邵湛汪祁毛禹狄米贝明臧计成戴宋茅庞熊纪舒屈项祝董粱杜阮" +
                  "席季麻强贾路娄危江童颜郭梅盛林刁钟徐邱骆高夏蔡田胡凌霍万柯卢莫房缪干解应宗丁宣邓郁单杭洪包诸左石崔吉龚程邢滑裴陆荣翁荀羊甄家封芮储靳邴" +
                  "松井富乌焦巴弓牧隗山谷车侯伊宁仇祖武符刘景詹束龙叶幸司韶黎乔苍双闻莘劳逄姬冉宰桂牛寿通边燕冀尚农温庄晏瞿茹习鱼容向古戈终居衡步都耿满弘" +
                  "国文东殴沃曾关红游盖益桓公晋楚闫";
      
          private static String familyTwoName = "欧阳太史端木上官司马东方独孤南宫万俟闻人夏侯诸葛尉迟公羊赫连澹台皇甫宗政濮阳公冶太叔申屠公孙慕容仲孙钟离长孙宇" +
                  "文司徒鲜于司空闾丘子车亓官司寇巫马公西颛孙壤驷公良漆雕乐正宰父谷梁拓跋夹谷轩辕令狐段干百里呼延东郭南门羊舌微生公户公玉公仪梁丘公仲公上" +
                  "公门公山公坚左丘公伯西门公祖第五公乘贯丘公皙南荣东里东宫仲长子书子桑即墨达奚褚师吴铭";
      
          private static String boyName = "伟刚勇毅俊峰强军平保东文辉力明永健世广志义兴良海山仁波宁贵福生龙元全国胜学祥才发武新利清飞彬富顺信子杰涛昌成康星光天达" +
                  "安岩中茂进林有坚和彪博诚先敬震振壮会思群豪心邦承乐绍功松善厚庆磊民友裕河哲江超浩亮政谦亨奇固之轮翰朗伯宏言若鸣朋斌梁栋维启克伦翔旭鹏泽" +
                  "晨辰士以建家致树炎德行时泰盛雄琛钧冠策腾楠榕风航弘";
      
          private static String girlName = "秀娟英华慧巧美娜静淑惠珠翠雅芝玉萍红娥玲芬芳燕彩春菊兰凤洁梅琳素云莲真环雪荣爱妹霞香月莺媛艳瑞凡佳嘉琼勤珍贞莉桂娣叶璧" +
                  "璐娅琦晶妍茜秋珊莎锦黛青倩婷姣婉娴瑾颖露瑶怡婵雁蓓纨仪荷丹蓉眉君琴蕊薇菁梦岚苑婕馨瑗琰韵融园艺咏卿聪澜纯毓悦昭冰爽琬茗羽希宁欣飘育滢馥" +
                  "筠柔竹霭凝晓欢霄枫芸菲寒伊亚宜可姬舒影荔枝思丽";
      
          private static String phoneTwoNum = "3578";
      
      
          private static String[] province = {"河北省", "山西省", "辽宁省", "吉林省", "黑龙江省", "江苏省", "浙江省", "安徽省", "福建省", "江西省", "山东省", "河南省", "湖北省", "湖南省", "广东省", "海南省", "四川省", "贵州省", "云南省", "陕西省", "甘肃省", "青海省", "台湾省",};
          private static String[] city = {"安康市", "安庆市", "安顺市", "安阳市", "鞍山市", "巴彦淖尔市", "巴中市", "白城市", "白山市", "白银市", "百色市", "蚌埠市", "包头市", "宝鸡市", "保定市", "保山市", "北海市", "本溪市", "滨州市", "沧州市", "昌都地区", "长春市", "长沙市", "长治市", "常德市", "常州市", "巢湖市", "朝阳市", "潮州市", "郴州市", "成都市", "承德市", "池州市", "赤峰市", "崇左市", "滁州市", "达州市", "大连市", "大庆市", "大同市", "丹东市", "德阳市", "德州市", "定西市", "东莞市", "东营市", "鄂尔多斯市", "鄂州市", "防城港市", "佛山市", "福州市", "抚顺市", "抚州市", "阜新市", "阜阳市", "甘南州", "赣州市", "固原市", "广安市", "广元市", "广州市", "贵港市", "贵阳市", "桂林市", "哈尔滨市", "哈密地区", "海北藏族自治州", "海东地区", "海口市", "邯郸市", "汉中市", "杭州市", "毫州市", "合肥市", "河池市", "河源市", "菏泽市", "贺州市", "鹤壁市", "鹤岗市", "黑河市", "衡水市", "衡阳市", "呼和浩特市", "呼伦贝尔市", "湖州市", "葫芦岛市", "怀化市", "淮安市", "淮北市", "淮南市", "黄冈市", "黄山市", "黄石市", "惠州市", "鸡西市", "吉安市", "吉林市", "济南市", "济宁市", "佳木斯市", "嘉兴市", "嘉峪关市", "江门市", "焦作市", "揭阳市", "金昌市", "金华市", "锦州市", "晋城市", "晋中市", "荆门市", "荆州市", "景德镇市", "九江市", "酒泉市", "开封市", "克拉玛依市", "昆明市", "拉萨市", "来宾市", "莱芜市", "兰州市", "廊坊市", "乐山市", "丽江市", "丽水市", "连云港市", "辽阳市", "辽源市", "聊城市", "临沧市", "临汾市", "临沂市", "柳州市", "六安市", "六盘水市", "龙岩市", "陇南市", "娄底市", "泸州市", "吕梁市", "洛阳市", "漯河市", "马鞍山市", "茂名市", "眉山市", "梅州市", "绵阳市", "牡丹江市", "内江市", "南昌市", "南充市", "南京市", "南宁市", "南平市", "南通市", "南阳市", "宁波市", "宁德市", "攀枝花市", "盘锦市", "平顶山市", "平凉市", "萍乡市", "莆田市", "濮阳市", "普洱市", "七台河市", "齐齐哈尔市", "钦州市", "秦皇岛市", "青岛市", "清远市", "庆阳市", "曲靖市", "衢州市", "泉州市", "日照市", "三门峡市", "三明市", "三亚市", "汕头市", "汕尾市", "商洛市", "商丘市", "上饶市", "韶关市", "邵阳市", "绍兴市", "深圳市", "沈阳市", "十堰市", "石家庄市", "石嘴山市", "双鸭山市", "朔州市", "四平市", "松原市", "苏州市", "宿迁市", "宿州市", "绥化市", "随州市", "遂宁市", "台州市", "太原市", "泰安市", "泰州市", "唐山市", "天水市", "铁岭市", "通化市", "通辽市", "铜川市", "铜陵市", "铜仁市", "吐鲁番地区", "威海市", "潍坊市", "渭南市", "温州市", "乌海市", "乌兰察布市", "乌鲁木齐市", "无锡市", "吴忠市", "芜湖市", "梧州市", "武汉市", "武威市", "西安市", "西宁市", "锡林郭勒盟", "厦门市", "咸宁市", "咸阳市", "湘潭市", "襄樊市", "孝感市", "忻州市", "新乡市", "新余市", "信阳市", "兴安盟", "邢台市", "徐州市", "许昌市", "宣城市", "雅安市", "烟台市", "延安市", "盐城市", "扬州市", "阳江市", "阳泉市", "伊春市", "伊犁哈萨克自治州", "宜宾市", "宜昌市", "宜春市", "益阳市", "银川市", "鹰潭市", "营口市", "永州市", "榆林市", "玉林市", "玉溪市", "岳阳市", "云浮市", "运城市", "枣庄市", "湛江市", "张家界市", "张家口市", "张掖市", "漳州市", "昭通市", "肇庆市", "镇江市", "郑州市", "中山市", "中卫市", "舟山市", "周口市", "株洲市", "珠海市", "驻马店市", "资阳市", "淄博市", "自贡市", "遵义市",};
          private static String[] area = {"伊春区", "带岭区", "南岔区", "金山屯区", "西林区", "美溪区", "乌马河区", "翠峦区", "友好区", "新青区", "上甘岭区", "五营区", "红星区", "汤旺河区", "乌伊岭区", "榆次区"};
          private static String[] road = {"黄河路", "中原路", "安波路", "新四路", "安汾路", "安福路", "安国路", "安化路", "安澜路", "安龙路", "安仁路", "安顺路", "安亭路", "安图路", "安业路", "安义路", "安远路", "鞍山路", "鞍山支路", "澳门路", "八一路", "巴林路", "白城路", "白城南路", "白渡路", "白渡桥", "白兰路", "白水路", "白玉路", "百安路(方泰镇)", "百官街", "百花街", "百色路", "板泉路", "半淞园路", "包头路", "包头南路", "宝安公路", "宝安路", "宝昌路", "宝联路", "宝林路", "宝祁路", "宝山路", "宝通路", "宝杨路", "宝源路", "保德路", "保定路", "保屯路", "保屯路", "北艾路",};
          private static String[] home = {"金色家园", "耀江花园", "阳光翠竹苑", "东新大厦", "溢盈河畔别墅", "真新六街坊", "和亭佳苑", "协通公寓", "博泰新苑", "菊园五街坊", "住友嘉馨名园", "复华城市花园", "爱里舍花园"};
      
          private static String passwordForm = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz~!@#$%^&*()_+{}|<>?";
      
          /**
           * 生成随机数
           */
          public static int randomInt() {
              return random.nextInt();
          }
      
          /**
           * 生成随机数(最大值限制)
           */
          public static int randomInt(int maxNum) {
              return random.nextInt(maxNum);
          }
      
          /**
           * 获取随机男生姓名
           */
          public static String getRandomBoyName() {
              int bodNameIndexOne = randomInt(boyName.length());
              int bodNameIndexTwo = randomInt(boyName.length());
              return getNameStr(bodNameIndexOne, bodNameIndexTwo, boyName);
          }
      
      
          /**
           * 获取随机女生姓名
           */
          public static String getRandomGirlName() {
              int bodNameIndexOne = randomInt(girlName.length());
              int bodNameIndexTwo = randomInt(girlName.length());
              return getNameStr(bodNameIndexOne, bodNameIndexTwo, girlName);
          }
      
          /**
           * 获取随机手机号
           */
          public static String getRandomPhone() {
              int phoneTwoRandomIndex = randomInt(4);
              return "1" + phoneTwoNum.substring(phoneTwoRandomIndex, phoneTwoRandomIndex + 1) + (100000000 + randomInt(899999999));
          }
      
          /**
           * 获取随机qq邮箱
           */
          public static String getRandomQQEmail() {
              return ("" + random.nextLong()).substring(10) + "@qq.com";
          }
      
          /**
           * 获取随机性别
           */
          public static String getRandomSex() {
              return randomInt(2) % 2 == 0 ? "男" : "女";
          }
      
          /**
           * 获取随机年龄
           *
           * @param min 最小年龄
           * @param max 最大年龄
           * @return
           */
          public static int getRandomAge(int min, int max) {
              return min + random.nextInt(max - min);
          }
      
          /**
           * 获取随机金额
           */
          public static Double getRandomMoney(int min, int max) {
              int randomAge = getRandomAge(min, max);
              double v = random.nextDouble();
              return randomAge + v;
          }
      
          /**
           * 获取随机金额
           */
          public static BigDecimal getRandomDecimal(Integer min, Integer max) {
              return getRandomRedPacket(min, max, BigDecimal.ROUND_DOWN);
          }
      
          /**
           * 获取金额
           *
           * @param min
           * @param max
           * @return
           */
          public static BigDecimal getRandomRedPacket(Integer min, Integer max, int roundingMode) {
              float minF = min.floatValue();
              float maxF = max.floatValue();
              //生成随机数
              BigDecimal db = new BigDecimal(Math.random() * (maxF - minF) + minF);
              //返回保留两位小数的随机数。不进行四舍五入
              return db.setScale(2, roundingMode);
          }
      
          /**
           * 获取随机住址
           */
          public static String getRandomAddress() {
              return province[randomInt(province.length)] +
                      city[randomInt(city.length)] +
                      area[randomInt(area.length)] +
                      road[randomInt(road.length)] +
                      home[randomInt(home.length)];
          }
      
          /**
           * 获取随机时间
           */
          public static Date getRandonTime() {
              Random rndYear = new Random();
              int year = rndYear.nextInt(18) + 2000;  //生成[2000,2017]的整数;年
              Random rndMonth = new Random();
              int month = rndMonth.nextInt(12) + 1;   //生成[1,12]的整数;月
              Random rndDay = new Random();
              int Day = rndDay.nextInt(30) + 1;       //生成[1,30)的整数;日
              Random rndHour = new Random();
              int hour = rndHour.nextInt(23);       //生成[0,23)的整数;小时
              Random rndMinute = new Random();
              int minute = rndMinute.nextInt(60);   //生成分钟
              Random rndSecond = new Random();
              int second = rndSecond.nextInt(60);   //秒
              String dateStr = year + "-" + month + "-" + Day + "  " + hour + ":" + minute + ":" + second;
      
              return dateTime(YYYY_MM_DD_HH_MM_SS, dateStr);
          }
      
          /**
           * 获取随机密码(指定长度)
           */
          public static String getRandomPassword(int length) {
              StringBuilder springBuilder = new StringBuilder();
              for (int i = 0; i < length; i++) {
                  int index = randomInt(passwordForm.length());
                  springBuilder.append(passwordForm.substring(index, index + 1));
              }
              return springBuilder.toString();
          }
      
          /**
           * 获取随机密码(指定长度)
           */
          public static String getRandomPassword() {
              return getRandomPassword(12);
          }
      
          public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
      
          public static String toSeconds(Date date) {
              return format(date, YYYY_MM_DD_HH_MM_SS);
          }
      
          public static String format(Date date, String format) {
              SimpleDateFormat sdf = new SimpleDateFormat(format);
              return date == null ? "" : sdf.format(date);
          }
      
          public static final Date dateTime(final String format, final String ts) {
              try {
                  return new SimpleDateFormat(format).parse(ts);
              } catch (ParseException e) {
                  throw new RuntimeException(e);
              }
          }
      
          private static String getNameStr(int bodNameIndexOne, int bodNameIndexTwo, String nameType) {
              if (randomInt(100) > surnameProbability) {
                  int familyOneNameIndex = randomInt(familyOneName.length());
                  return familyOneName.substring(familyOneNameIndex, familyOneNameIndex + 1) +
                          nameType.substring(bodNameIndexOne, bodNameIndexOne + 1) +
                          nameType.substring(bodNameIndexTwo, bodNameIndexTwo + 1);
              } else {
                  int familyTwoNameIndex = randomInt(familyTwoName.length());
                  familyTwoNameIndex = familyTwoNameIndex % 2 == 0 ? familyTwoNameIndex : familyTwoNameIndex - 1;
                  return familyTwoName.substring(familyTwoNameIndex, familyTwoNameIndex + 2) +
                          nameType.substring(bodNameIndexOne, bodNameIndexOne + 1) +
                          nameType.substring(bodNameIndexTwo, bodNameIndexTwo + 1);
              }
          }
      
      
          public static void main(String[] args) {
              int randomInt = randomInt(); // 获取随机数
              System.out.println("randomInt = " + randomInt);
              int randomInt2 = randomInt(8); // 获取随机数
              System.out.println("randomInt2 = " + randomInt2);
              String randomBoyName = getRandomBoyName(); // 获取男士姓名
              System.out.println("randomBoyName = " + randomBoyName);
              String randomGirlName = getRandomGirlName(); // 获取女士姓名
              System.out.println("randomGirlName = " + randomGirlName);
              String randomPhone = getRandomPhone(); // 获取手机号码
              System.out.println("randomPhone = " + randomPhone);
              String randomQQEmail = getRandomQQEmail(); // 获取qq邮箱
              System.out.println("randomQQEmail = " + randomQQEmail);
              String randomSex = getRandomSex(); // 获取性别
              System.out.println("randomSex = " + randomSex);
              int randomAge = getRandomAge(0, 100); // 获取年龄
              System.out.println("randomAge = " + randomAge);
              Double randomMoney = getRandomMoney(0, 100); // 获取金额double
              System.out.println("randomMoney = " + randomMoney);
              BigDecimal randomDecimal = getRandomDecimal(0, 200); // 获取金额保留两位小数decimal
              System.out.println("randomDecimal = " + randomDecimal);
              String randomAddress = getRandomAddress(); // 获取地址
              System.out.println("randomAddress = " + randomAddress);
              Date randonTime = getRandonTime(); // 获取时间
              System.out.println("randonTime = " + randonTime);
              String format = toSeconds(randonTime); // 获取时间
              System.out.println("format = " + format);
              String randomPassword = getRandomPassword(); // 获取密码
              System.out.println("randomPassword = " + randomPassword);
              String randomPassword1 = getRandomPassword(10); // 获取密码(10位)
              System.out.println("randomPassword1 = " + randomPassword1);
          }
      
      }

      java druid工具类及测试

      import com.alibaba.druid.pool.DruidDataSourceFactory;
      
      import javax.sql.DataSource;
      import java.io.FileInputStream;
      import java.sql.Connection;
      import java.sql.ResultSet;
      import java.sql.SQLException;
      import java.sql.Statement;
      import java.util.Properties;
      
      /**
       * 基于druid数据库连接池的工具类
       */
      public class JDBCUtilsByDruid {
      
          private static DataSource ds;
      
          //在静态代码块完成ds初始化
          static {
              Properties properties = new Properties();
              try {
                  properties.load(new FileInputStream("src\\druid.properties"));
                  ds = DruidDataSourceFactory.createDataSource(properties);
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      
          //编写getConnection方法
          public static Connection getConnection() throws SQLException {
              return ds.getConnection();
          }
      
          //关闭连接,注意:在数据库连接池技术中,close不是真的断掉连接
          //而是把使用的Connection对象放回连接池
          public static void close(ResultSet resultSet, Statement statement, Connection connection) {
      
              try {
                  if(resultSet != null) {
                      resultSet.close();
                  }
                  if(statement != null) {
                      statement.close();
                  }
                  if(connection != null) {
                      connection.close();
                  }
              } catch (SQLException e) {
                  throw new RuntimeException(e);
              }
          }
      }
      import com.hspedu.jdbc.utils.JDBCUtils;
      import org.junit.Test;
      
      import java.sql.*;
      
      public class JDBCUtilsByDruid_Use {
      
          @Test
          public void testSelect() {
      
              System.out.println("使用druid方式完成");
              //1.得到连接
              Connection connection = null;
      
              //2.组织一个sql
              String sql = "select * from actor where id = ?";
      
              //3.创建PreparedStatement对象
              PreparedStatement preparedStatement = null;
              ResultSet resultSet = null;
              try {
                  connection = JDBCUtilsByDruid.getConnection();
                  System.out.println(connection.getClass());  //运行类型 class com.alibaba.druid.pool.DruidPooledConnection
                  preparedStatement = connection.prepareStatement(sql);
                  //给占位符赋值
                  preparedStatement.setInt(1, 1);
                  //执行
                  resultSet = preparedStatement.executeQuery();
                  //遍历该结果集
                  while (resultSet.next()) {
                      int id = resultSet.getInt("id");
                      String name = resultSet.getString("name");
                      String sex = resultSet.getString("sex");
                      Date borndate = resultSet.getDate("borndate");
                      String phone = resultSet.getString("phone");
                      System.out.println(name + "\t" + sex + "\t" + borndate + "\t" + phone);
                  }
              } catch (SQLException e) {
                  e.printStackTrace();
              } finally {
                  //关闭资源
                  JDBCUtilsByDruid.close(resultSet, preparedStatement, connection);
              }
          }
      }
      本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
      作者最新文章
      编程开发 Java
      相关文章 更多
      精品专题 更多
      装机必备

      正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

      Windows

      正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

      PDF教程

      正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

      macOS软件

      正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

      IOS软件

      正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

      AI

      正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

      Mac软件 更多
      Postman macOS版
      Postman macOS版

      Postman是一套面向API全生命周期的开发与测试平台,可在Mac上发送和调试多种协议请求,管理集合、环境及认证信息,并完成脚本测试、模拟服务、监控、文档发布和团队协作。它适合开发、测试及运维人员使用,提供个人免费方案。

      Docker Desktop macOS版
      Docker Desktop macOS版

      Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。

      Android Studio macOS版
      Android Studio macOS版

      Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。

      Xcode macOS版
      Xcode macOS版

      Xcode 是苹果面向 Mac 提供的官方集成开发环境,将代码编辑、项目构建、SwiftUI 实时预览、设备模拟、自动化测试、断点调试、性能分析和应用分发整合在同一套工作流中,适合开发与维护 iPhone、iPad、Mac、Apple Wa

      JetBrains WebStorm macOS版
      JetBrains WebStorm macOS版

      JetBrains WebStorm 是面向 JavaScript、TypeScript 和现代 Web 技术的专业集成开发环境,可智能理解项目结构,提供代码补全、重构、错误检查、运行调试、测试及 Git 工具。

      PhpStorm macOS版
      PhpStorm macOS版

      PhpStorm 是 JetBrains 推出的专业 PHP 集成开发环境,可在 Mac 上完成代码编写、智能检查、重构、调试、测试和数据库管理。它支持主流 PHP 框架、Composer、Git、Docker 与远程解释器。

      JetBrains PyCharm macOS版
      JetBrains PyCharm macOS版

      JetBrains PyCharm 是面向 Python 开发者的集成开发环境,提供智能补全、代码检查、重构、调试、测试、版本控制及虚拟环境管理功能。Mac 版兼容 Intel 与 Apple 芯片,核心功能可免费使用。

      JetBrains IntelliJ IDEA macOS版
      JetBrains IntelliJ IDEA macOS版

      IntelliJ IDEA 是 JetBrains 推出的专业集成开发环境,重点服务于 Java、Kotlin 与 JVM 项目开发。软件集成代码补全、静态检查、重构、调试、测试、版本控制及构建工具,并可借助插件扩展语言和框架支持。

      Visual Studio Code macOS版
      Visual Studio Code macOS版

      Visual Studio Code 是微软提供的免费代码编辑器,支持 macOS,并为 Intel 与 Apple 芯片 Mac 提供适配版本。软件集代码编辑、调试、Git 源代码管理、集成终端和扩展市场于一体。

      REAPER macOS版
      REAPER macOS版

      REAPER是Cockos开发的数字音频工作站,提供多轨音频与MIDI录制、剪辑、处理、混音和母带制作工具。Mac版兼容Intel与Apple芯片,支持AU、VST、VST3、CLAP等插件格式,并提供高度可定制的工作流程。

      Adobe Audition macOS版
      Adobe Audition macOS版

      Adobe Audition 是面向播客、影视后期、音乐制作及内容创作者的专业音频工作站,提供波形精修、多轨录制与混音、频谱编辑、降噪修复、响度匹配和效果处理工具,并可与 Adobe Premiere 协同完成视频声音制作。

      Pro Tools macOS版
      Pro Tools macOS版

      Pro Tools 是 Avid 推出的专业数字音频工作站,覆盖多轨录音、无损剪辑、MIDI 编曲、插件处理、自动化混音及声音与画面同步等工作。它拥有 Intro、Artist、Studio 和 Ultimate 等方案。

      WINDOWS 更多
      PixPix 网页版
      PixPix 网页版

      PixPix 是面向品牌、卖家和内容团队的在线 AI 图片视频创作平台,提供图视频 Agent、无限画布、图片生成、视频生成、自然语言编辑及商品套图、产品精修和带货视频等电商工具。

      Postman Windows版
      Postman Windows版

      Postman 是面向 API 全生命周期的开发与协作平台。Windows 桌面版可用于构建和发送 HTTP、GraphQL、gRPC、WebSocket、MQTT 等请求,并提供环境变量、集合、脚本测试、模拟服务、监控、文档及团队工作区等

      Docker Desktop Windows版
      Docker Desktop Windows版

      Docker Desktop 为 Windows 开发者提供集成式容器环境,内置 Docker Engine、命令行工具、Compose、Build 与 Kubernetes 等组件,可在本机完成镜像构建、容器运行、日志查看和资源管理。

      Android Studio Windows版
      Android Studio Windows版

      Android Studio 是 Google 面向 Android 应用开发提供的官方集成开发环境,以 IntelliJ IDEA 为基础,集成智能代码编辑、Gradle 构建、设备模拟、界面预览、调试测试及性能分析工具,

      JetBrains WebStorm Windows版
      JetBrains WebStorm Windows版

      WebStorm 是 JetBrains 面向 JavaScript、TypeScript 和现代 Web 技术打造的集成开发环境。它提供项目级代码分析、智能补全、安全重构、导航搜索,并集成调试、测试、终端、Git 与常用前端工具,

      JetBrains PhpStorm Windows版
      JetBrains PhpStorm Windows版

      PhpStorm 是 JetBrains 面向 PHP 与现代 Web 开发打造的专业集成开发环境,提供代码补全、静态检查、重构、调试、测试、数据库、版本控制及前端语言支持。Windows 用户可直接下载安装程序,

      JetBrains PyCharm Windows版
      JetBrains PyCharm Windows版

      PyCharm 是 JetBrains 推出的 Python 集成开发环境,提供智能代码补全、错误检查、重构、调试、测试、Git、终端及 Jupyter Notebook 支持。统一版安装后可体验 30 天 Pro 功能,

      JetBrains IntelliJ IDEA Windows版
      JetBrains IntelliJ IDEA Windows版

      JetBrains IntelliJ IDEA 是以 Java、Kotlin 和 JVM 项目为核心的专业集成开发环境,提供智能补全、代码检查、安全重构、调试、测试、版本控制及构建工具集成。统一发行版的核心功能可免费用于商业和非商业项目,

      Visual Studio Code Windows版
      Visual Studio Code Windows版

      Visual Studio Code 是微软推出的免费代码编辑器,Windows 版集成智能补全、代码导航、调试、终端和版本控制,并可通过扩展添加语言、格式化及远程开发能力。它启动较快、配置灵活,

      REAPER Windows版
      REAPER Windows版

      REAPER 是 Cockos 推出的数字音频工作站,适用于录音、MIDI 编曲、音频编辑、混音、母带制作及声音设计。软件安装包小巧,支持多轨录制、灵活路由、自动化、第三方插件和脚本扩展,并提供完整功能的 60 天免费评估期。

      Adobe Audition Windows版
      Adobe Audition Windows版

      Adobe Audition 是面向播客、影视后期、广播与音乐制作的专业音频工作站,提供波形编辑、多轨混音、频谱分析、录音、降噪修复和效果处理等功能。Windows 版通过 Adobe Creative Cloud 安装和管理,

      Pro Tools Windows版
      Pro Tools Windows版

      Pro Tools 是 Avid 推出的专业数字音频工作站,提供多轨录音、音频剪辑、MIDI编曲、插件处理、自动化混音及影视声音制作能力。它适合音乐人、录音师、制作人和音频后期团队使用,并提供免费入门版、订阅方案及永久授权选择。