このアプローチをテストする方法 - 特集記事を

研究のタイトルは、クイズに参加できる惑星、舞台裏の返信「知識の惑星」の知識から来ています。

二日前に通信の友人を得るために、彼らは機能ユニークな注文番号を生成して、コードが白羽、およびこの方法に問題が尋ねましたか?どのようにテストを変更しますか?
次のように最初にコードをリリース:

  /**
     * 生产唯一的交易订单号
     *
     * @return
     */
    public static String createUniqueOrderNo() {
        SimpleDateFormat nyrsfm = new SimpleDateFormat("yyyyMMddHHmmss");
        return nyrsfm.format(new Date()) + getRandomLengthCode(4);
    }


    /**
     * 获取随机的短信验证码
     *
     * @return
     */
    public static String getRandomLengthCode(int length) {
        return String.valueOf((int) ((Math.random() * 9 + 1) * Math.pow(10, length - 1)));
    }

最初の製造指図番号、及び第二は、4つの方法の乱数を生成することです。私はアイデア最初の方法についてお話しましょう:二つの部分、1時間での注文番号(これに応じてyyyyMMddHHmmss、第二部は、4つの乱数形式です)。第二の方法:double型の数値を生成する[0、1)と(9 + 1)式により1,10との間の数)を得、次いで、特定のに10を乗じします*次いで、[1000,10000)数を与える電源(ここでは3)、及び[1000,10000の範囲の4つの整数)を与えるために、INTと強いに変換されます。

解釈が完了すると、次はこの方法の私の知識を共有しています。私たちが問題の中心的な問題だったから始まることである:重複した注文番号になります。明白な答えは次のように説明することである。第二のレベルに正確な時間を、乱数範囲の概算は9000で、1秒未満ならば9000件の注文を生成し、その後、確かにそこに繰り返されます。

それでは、どのようにそれをテストするのですか?またはどのようにこのバグはそれを言及変更するには?

私は2つの選択肢を提案した。一つはコンテンツとして、口頭または書面で説明することで、2番目は、試験に合格するために、繰り返し注文番号を生成することです。

オプション1:

男は、ものを見て、それが判明し、この方法ではうまく動作しません。
ない非認識の開発のための主な理由は、しかし、2つの理由で変更する必要性を感じていないこと、一つはビジネスのそんなにボリューム、そして第二に、発生確率が小さすぎではありません。

オプション2:

注文番号を繰り返すことで発生する圧力を測定する、それがN回繰り返されるテストは、注文番号を得られなかった、非常に面倒に動作します。
主な理由は、おそらく、QPS(全体オーダーインタフェース)の十貧弱なパフォーマンステスト環境で、長すぎるために測定された圧力は、サービスが不安定にすぎダーティデータをリードします。

以下は、プログラムへの惑星の知識のパートナーは以下のとおりです。

分プラス➕SMS確認コードは、注文日の固有の番号を構成しています。リスク:特定の環境、複数のサーバで一緒に実行する場合、同じ注文番号可能。名前などのユーザを設定するだけ推奨値。私たちは、UUIDをお勧めします。コードは以下の通りであります:

  /**
     * 生产唯一的交易订单号
     *
     * @return
     */
    public static String createUniqueOrderNo() {
        return UUID.random.toString;
    }

その他のソリューションは、マルチスレッドを使用せずに、一人でテストするために、このメソッドを置くことです。レコードのループスルーのためにすぐに、私のテストコードを共有します:

 public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        range(250).forEach(x->
        {
            String randomLengthCode = getRandomLengthCode(4);
            if (list.contains(randomLengthCode))
                output(x);
            else
                list.add(randomLengthCode);
        });
    }

より良い方法がある場合は、議論を開始し、メッセージや知識惑星の交換を残すことを歓迎します。

第二に、私はまた、微話す機会を持っているパフォーマンスの問題が心配です。

より多くのソリューションは、多くのフレームワークは、ユーザーのIDに関連付けられている一般的意志のIDをサポートしています。比較的単純な言った:より支払う一意のオーダ番号、ユーザIDなどのような標識、ユーザインタフェース制約は、その後(例えばのみ次単一5Sベルなど)次の周波数を生成します。


おすすめ

転載: www.cnblogs.com/FunTester/p/12000862.html